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