2

有一个跨多个位置运行的 Web 应用程序,
通过在 linux 上运行此命令,我可以看到许多连接堆积:

ps -ef|grep LOCAL

向我显示具有进程 ID 的活动 oracle 连接数,并且连接数每小时增长 5-7 个。几个小时后,应用程序变慢,最终需要重新启动 tomcat 服务器。

因为,我能够看到连接在增长,有没有办法获得这些连接的来源,找出哪些类或对象创建了这些铺设的连接?

而且我没有使用 Tomcat 连接池,我尝试通过发出 kill -3 tomcat pid 来生成线程转储,但对我没有用,因为我无法理解它们,甚至尝试过线程分析器。

是否有任何简单的方法可以使用某些 tomcat 功能或通过任何其他方式来获取与这些搁置连接关联的发起者类以获得一个小提示?

4

3 回答 3

3

JProfiler中,您将使用 JDBC 探针来获取打开连接的堆栈跟踪。您将在时间轴中选择连接

在此处输入图像描述

并跳转到事件视图

在此处输入图像描述

您可以在其中选择“连接打开”事件。在下部窗格中,显示了相关的堆栈跟踪。

免责声明:我公司开发JProfiler

于 2013-01-17T09:36:49.497 回答
1

您可以搜索javax.sql.DataSource.getConnection()使用 IDE 的用途。

如果您在调试模式下启动 tomcat,您可以查找连接类的实例(并看到它们增加)。此外,在构造函数上放置一个断点将在创建过程中捕获它们。

但实际上你应该使用连接池。这是解决您的问题的最简单方法。

于 2013-01-16T10:57:25.313 回答
0

也许这两个工具可以帮助您确定是什么降低了您的服务器应用程序的性能。

仪表

ab 基准测试工具

由于一些简单的实现问题,性能也可能会减慢。对于 Web 应用程序,您可能希望使用 NIO(面向缓冲区、非阻塞 IO)而不是 IO,而且您可能正在执行大量字符串连接(使用 StringBuffer)。

于 2013-01-16T10:58:41.770 回答