Ubuntu
Linux 伺服器在執行一段時間後不響應 TCP 連接。如何分析?
幾天以來,我在網際網路上的 Ubuntu 11.04 伺服器出現了一些奇怪的行為。它在一些 Java Web 應用程序中執行得非常好。然後,突然它不再接受連接。當我嘗試 ssh 或 http-connect 我的伺服器時,我沒有得到任何響應,直到我超時。但是 ping 工作得很好。nmap 也可以:
Starting Nmap 5.21 ( http://nmap.org ) at 2011-08-29 10:52 CEST Nmap scan report for ... Host is up (0.020s latency). Not shown: 994 closed ports PORT STATE SERVICE 22/tcp open ssh 25/tcp open smtp 53/tcp open domain 443/tcp open https 3000/tcp open ppp 3128/tcp open squid-http
重新啟動後,一切都會再次執行幾個小時。
這可能是什麼?或者如何分析這個問題?
這確實看起來像您的記憶體不足,系統上沒有交換。如果 linux 系統記憶體不足,它就不能再接受 TCP 連接,因為連接需要建立記憶體。ICMP 可能不需要任何東西,因為沒有要維護的狀態。
到處檢查記憶體設置,確保分配給 JVM 的記憶體不超過 70%(-Xms 和 -Xmx 選項)。
如果尚未完成啟動交換,您可以在磁碟的某處創建一個基本交換文件:
dd if=/dev/zero of=/mnt/swapfile bs=1M count=10240 mkswap /mnt/swapfile swapon /mnt/swapfile
如果在那之後您的系統再次掛起,那麼是時候進行一些低級別的監控了。