让web应用程序跨多个位置运行,
通过在linux上运行以下命令,我可以看到许多连接堆积:
ps -ef|grep LOCAL显示具有进程id的活动oracle连接的计数,并且连接计数每小时增长5-7个数字。几个小时后,应用程序变慢,最终需要重新启动tomcat服务器。
因为,我能够看到连接的增长,有没有办法获得这些连接的来源,找出是什么类或对象创建了这些已建立的连接?
而且我没有使用Tomcat连接池,我试图通过发出kill -3 tomcat pid来生成线程转储,但对我没有任何用处,因为我无法理解它们,甚至尝试过线程分析器。
有没有什么简单的方法可以让与这些已建立的连接相关联的发起者类获得一个小提示,使用一些tomcat功能,或者通过任何其他方法?
发布于 2013-01-17 17:36:49
在JProfiler中,您可以使用JDBC探测来获取打开连接的堆栈跟踪。您可以在时间线中选择连接

并跳转到events视图

您可以在其中选择“打开的连接”事件。在下部窗格中,将显示关联的堆栈跟踪。
免责声明:我的公司开发JProfiler
发布于 2013-01-16 18:57:25
您可以使用集成开发环境搜索javax.sql.DataSource.getConnection()的使用情况。
如果您在调试模式下启动tomcat,您可以查找connection类的实例(并看到它们不断增加)。此外,在构造函数上放置断点将在创建它们的过程中捕获它们。
但实际上,您应该使用连接池。这是解决你的问题的最简单的方法。
发布于 2013-01-16 18:58:42
也许这两个工具可以帮助您确定是什么降低了服务器应用程序的性能。
jmeter
ab benchmarking tool
由于一些简单的实现问题,性能也可能会变慢。对于web应用,您可能希望使用NIO (面向缓冲区的非阻塞IO),而不是IO,而且您可能需要进行大量的字符串连接(使用StringBuffer)。
https://stackoverflow.com/questions/14356308
复制相似问题