我有一个程序,实质上是一个在CentOS Linux 6.3上运行PostgreSQL DB的tomcat服务器。 当客户端向服务器提交大量数据(〜10MB)时,应该在TCP 9090上接收数据,客户端似乎挂起而没有得到服务器的响应。 我在日志中没有看到任何重要的东西,我只能发现端口9090上存在连接,并且在netstat的输出中有大约3.5 MB坐在recv-Q上。 这可能是一个系统或应用程序的问题?
这是什么strace显示: 9089 futex(0x7fdd80862528, FUTEX_WAKE_PRIVATE, 1) = 0 9089 futex(0x7fdd81e145a4, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1, {1374870092, 226655000}, ffffffff <unfinished ...> 9085 <... futex resumed> ) = -1 ETIMEDOUT (Connection timed out) 9085 futex(0x7fdd88004728, FUTEX_WAKE_PRIVATE, 1) = 0 9085 futex(0x7fdd94013464, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1, {1374870092, 226812000}, ffffffff <unfinished ...> 9071 <... futex resumed> ) = -1 ETIMEDOUT (Connection timed out) 9071 futex(0x7fde00092c28, FUTEX_WAKE_PRIVATE, 1) = 0 9071 futex(0x40b62e64, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1, {1374870087, 319631000}, ffffffff) = -1 ETIMEDOUT (Connection timed out) 9071 futex(0x7fde00092c28, FUTEX_WAKE_PRIVATE, 1) = 0 9071 futex(0x40b62e64, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1, {1374870087, 369779000}, ffffffff
这最终成为java进程的低内存问题。 添加RAM并调整数据库解决了它。 Java内存问题? 令人震惊,是吧?