我在一個4-CPU和32GB存儲器64位機(OS是CentOS的6.3)運行Tomcat。我啓動Tomcat與Java選項-server -Xms1024m -Xmx1024m -XX:PermSize=512m -XX:MaxPermSize=512m
Java程序(Tomcat)的保持進食存儲器(RES在頂部)
在開始的時候,RES只是810MB採用頂級,它會持續增加。在此期間,我運行jmap -J-d64 -histo pID
來檢查Java內存堆,並且我認爲gc工作正常,因爲堆積峯值爲510MB,gc後爲200MB左右。但是,當頂級RES達到1.1g時,CPU使用率將超過100%,Tomcat將掛起。
使用jstack pid
看到轉儲當CPU使用率是100%,一個名爲「虛擬線」線吃掉幾乎100%的CPU。我GOOGLE了,它是JVM gc線程。所以我的問題是:當gc工作正常時,爲什麼res保持增長?我怎麼能解決這個問題?謝謝。
我看你已經接受我的答案。出於好奇,請你簡單描述一下究竟是什麼原因,究竟有什麼幫助? –
當gc線程佔用超過100%的cpu時,我腦海中第一個想到的就是內存泄漏。但事實是-Xmx1024m對我的應用來說太小了......我犯了一個錯誤:(我將內存增加到2048m (-Xmx2048m),和頂級的RES時,它的最高1.2克不增加......... – ing
那麼我想通過@digitaljoel答案是比較合適的接受 –