让一个Web应用程序跨多个位置运行,
通过在linux上运行这个命令,我可以看到许多连接堆积起来:
ps -ef|grep LOCAL
向我显示与进程ID的活动oracle连接的数量,连接数量每小时增长5-7个数字。 几个小时后,应用程序变慢,最终tomcat服务器需要重新启动。
因为我可以看到连接的增长,有没有办法获得这些连接的来源,找出哪些类或对象创build了这些连接?
而我没有使用Tomcat连接池,我试图通过发出kill -3 tomcat pid生成线程转储,但是对我没用,因为我无法理解它们,甚至尝试过线程分析器。
是否有任何简单的方法来获得与这些奠定了连接的原始类与获得一个小提示,使用一些tomcatfunction,或通过任何其他手段?
在JProfiler中 ,您将使用JDBC探针来获取打开连接的堆栈跟踪。 您将选择时间线中的连接
并跳转到事件视图
在那里你可以选择“打开连接”事件。 在下面的窗格中显示相关的堆栈跟踪。
免责声明:我公司开发JProfiler
您可以使用IDE搜索javax.sql.DataSource.getConnection()
用法。
如果以调试模式启动tomcat,可以查找连接类的实例(并查看它们的增加情况)。 另外,在构造函数中放置一个断点会使它们陷入被创建的行为。
但是,你真的应该使用连接池。 这是解决您的问题的最简单方法。
也许这两个工具可以帮助你确定什么会降低你的服务器应用程序的性能。
JMeter的
ab基准工具
由于一些简单的实现问题,性能可能会下降。 您可能想要为Web应用程序使用NIO(面向缓冲区的非阻塞IO)而不是IO,也可能会执行大量字符串连接(使用StringBuffer)。