我的問題是,JVM是否共享與線程或進程相關的某種資源,可能導致ProcessBuilder性能在正常使用一個月或更長時間後出現峯值?對所有應用程序使用java 6 update 21。需要關於在Solaris下運行Java的ProcessBuilder的幫助
在過去的幾個月中,我們注意到我們的數據中心(運行Solaris 10的Sparc M4000)中的一臺服務器可以運行大約6-8周而沒有任何問題。然而,很快,利用ProcessBuilder類運行腳本的應用程序的性能會受到巨大的性能影響 - ProcessBuilder.start有時會花費一分鐘以上。重新啓動後,以及幾個星期後,正常返回時間在10秒或100毫秒範圍內。
我編寫了一個獨立的小應用程序,創建5個線程,每個線程使用ProcessBuilder連續運行10次'ls'命令,然後從中收集統計信息以監視原始問題。此應用程序在每次運行後退出,並且每小時只從cron運行一次。通常只需要一兩秒鐘。
昨天晚上,正常運行45天后,每次ProcessBuilder.start調用後,ProcessBuilder時間再次超過一分鐘。
top顯示沒有內存或CPU豬。我確實試圖在測試應用上做一個jstack,但得到錯誤「無法創建thread_db代理」。
任何想法?
我的猜測是你掛在某些東西上,而你正在讓GC努力工作。你有verbosegc日誌嗎? – 2011-01-27 18:24:50