我正在使用 apache bench 为在 tomcat 上运行的 java 应用程序运行一些基准测试。
说我运行一个测试,如:
ab -c 10 -n 10000 http://localhost:8080/hello/world
Run Code Online (Sandbox Code Playgroud)
它会运行得很好。如果我遵循它:
ab -c 50 -n 50000 http://localhost:8080/hello/world
Run Code Online (Sandbox Code Playgroud)
再次它会运行良好,但如果我再试一次,它可能会在 3500 个完成的请求后开始变慢。
我需要帮助来尝试调试此问题的根本原因。
我跑到了上面,我有一些未使用的内存,所以内存似乎不是问题。
tomcat6 进程确实达到了 70-80 甚至 107%。
似乎重新启动 tomcat 可以解决问题,但有时需要重新启动服务器。
这是在分配了 200 个线程的默认 tomcat 安装上。
Tomcat 日志为空。
更新
因此,我将 tcp_tw_recycle/reuse 都更改为 1,并且现在运行 netstat 显示的计数非常低。
在更改 tcp_tw_recycle/reuse 之前,我注意到事情变慢并运行 netstat 并且我有 32400 个 tcp TIME_WAIT 连接。
所以现在运行基准测试的更新,使用 -k 开关,我看到了更多的吞吐量。但是,在某些时候事情又开始变慢了,但是现在重新启动 tomcat 使事情恢复正常。之前,即使我重新启动tomcat,运行ab 的响应时间也会非常非常慢。 现在更改 tcp_tw_recycle/reuse 后,重新启动 tomcat 使事情恢复正常。运行 top 显示只有大约 20% 的 cpu 的 tomcat,所以现在看来问题出在 tomcat 上,但我怎么知道是什么?