簡體   English   中英

對導致服務器因“打開的文件過多”而掛起的 Java 程序進行故障排除

[英]Troubleshooting a Java program that causes a server to hang with “too many files open”

我有一個 Java 程序運行(在 linux 上)一段時間,然后導致服務器鎖定為“打開的文件太多”

重新啟動機器后,我再次運行 java 程序,然后針對它的 pid 執行 lsof 命令。 大量生產以下output的線:

java    971 uknown  980u     sock                0,9       0t0  20461 protocol: TCPv6

這是否意味着程序正在打開多個 tcp 連接而不是關閉它們?

我可以采取哪些進一步的步驟來解決此問題?

這意味着您的程序正在打開文件描述符但沒有關閉它們。 它可能是 sockets 或文件處理程序。 所以它導致資源泄漏。 確保所有文件處理程序都已關閉並准備好進行垃圾收集。

正如 dan1st 在評論中指出的那樣,避免這種情況的一種預防措施是使用 try-with-resources。 這將實現 AutoClosable 接口並確保自動關閉資源。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM