我正在運行一個web應用程序使用maven的jetty服務器。該應用程序在列表中包含大量靜態對象列表和地圖有助於2.8GB的物理內存使用量。幾個小時後,服務器會以最大CPU使用率掛起。沒有任何用戶交互或服務器上發出請求,就會發生這種情況Jetty服務器掛起大對象池,沒有任何請求
我注意到,在這幾個小時內,雖然服務器運行良好,但內存緩慢降低到1.7GB。我的懷疑是這可能是垃圾收集相關的問題。
問題:
- 難道是GC掛起而錯誤地收集或檢查我的大對象池及其引用?
- 我將如何去調試和解決這個問題?
請注意,在Windows上我沒有這個問題。一旦應用程序啓動並填充其池,它將佔用3.4GB並保持完全一樣,而不會崩潰。
服務器的啓動和環境:
setenforce 0
export MAVEN_OPTS="-Xmx5120m -Xms5120m -XX:+UseConcMarkSweepGC -Xgcthreads1 -XX:MaxGCPauseMillis=2000 -XX:GCTimeRatio=10"
sudo nohup mvn -D jetty.port=80 jetty:run &
操作系統:
Ubuntu 12.04.1 LTS
的Java:
OpenJDK Runtime Environment (IcedTea6 1.11.5) (6b24-1.11.5-0ubuntu1~12.04.1)
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)
Maven的:
Apache Maven 3.0.4
碼頭:
8.1.8.v20121106
這是在jetty開發過程中顯示的:運行或者您是否嘗試使用maven和jetty運行生產類型實例:run?如果是後者,它絕不是推薦的部署解決方案。 –
它是後面的,即生產型實例。這是一項非常輕便的服務,因此決定採用Jetty。雖然這是我第一次在生產中使用Jetty,但我發現許多公司在生產中使用碼頭。你是否建議我應該轉向更重量級的東西,比如Glassfish,JBoss,TomEE +或者我應該將該實例作爲jar來運行? Thx –
不,只是不要通過jetty-maven-plugin運行它,要麼編寫一個嵌入式jetty wrapper,要麼將其部署到普通的jetty發行版中...是不是碼頭問題,它是一個生產部署使用maven工具的場景,既不maven也不jetty插件打算用於:) –