一、jstack 用法jstack [option] pid -l long listings,會打印出額外的鎖信息,在發生死鎖時能夠用jstack -l pid來觀察鎖持有狀況 -m mixed mode,不只會輸出Java堆棧信息,還會輸出C/C++堆棧信息(好比Native方法) 找出進程內最耗費CPU的線程,可使用ps -Lfp pid或者ps -mp pid -o THREAD, tid, time或者top -Hp pid printf "%x\n" pid 獲得pid的十六進制 jstack pid | grep ` printf "%x\n" pid ` 要留意下面幾種狀態 死鎖,Deadlock(重點關注) 等待資源,Waiting on condition(重點關注) • 等待獲取監視器,Waiting on monitor entry(重點關注) 阻塞,Blocked(重點關注) • 執行中,Runnable • 暫停,Suspended • 對象等待中,Object.wait() 或 TIMED_WAITING • 中止,Parkedhtml
二、jmap jmap pid (64位機器jmap -permstat pid) jmap -heap pid查看進程堆內存使用狀況 jmap -histo[:live] pid查看堆內存中的對象數目、大小統計直方圖,若是帶上live則只統計活對象 jmap -dump[:live,]format=b,file=dumpFileName pid 生成dump文件 例如jmap -dump:format=b,file=/tmp/dump.dat 21711java
三、jstat jstat -gc pid 查看gc狀況tomcat
JAVA_OPTS="-server -Xms2048m -Xmx2048m -Xmn512m -XX:PermSize=256M -XX:MaxPermSize=256m -Xss256k -XX:SurvivorRatio=4 -XX:MaxTenuringThreshold=20 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=73 -XX:+UseCMSCompactAtFullCollection -XX:+CMSParallelRemarkEnabled -XX:CMSFullGCsBeforeCompaction=2 -Djava.awt.headless=true"服務器
上面的配置是基於4G內存設置的,具體修改看本身手上服務器的配置。 參數的含義: -server 告訴tomcat使用server模式 能得到更大併發數和性能 -Xms2048m -Xmx2048m JVM內存的總數 -Xmn512m 年輕代內存大小 -XX:PermSize=256M -XX:MaxPermSize=256m 永久帶內存大小 Xss256k 線程大小 -XX:SurvivorRatio=4 設置年輕代中Eden區與Survivor區的大小比值。設置爲4,則兩個Survivor區與一個Eden區的比值爲2:4,一個Survivor區佔整個年輕代的1/6 -XX:MaxTenuringThreshold=20 設置垃圾最大年齡。若是設置爲0的話,則年輕代對象不通過Survivor區,直接進入年老代。對於年老代比較多的應用,能夠提升效率。若是將此值設置爲一個較大值,則年輕代對象會在Survivor區進行屢次複製,這樣能夠增長對象再年輕代的存活時間,增長在年輕代即被回收的機率 -XX:+UseParNewGC 對年輕代採用多線程並行回收,這樣收得快 XX:+UseConcMarkSweepGC CMS gc,這一特性只有jdk1.5即後續版本才具備的功能,它使用的是gc估算觸發和heap佔用觸發。 咱們知道頻頻繁的GC會造面JVM的大起大落從而影響到系統的效率,所以使用了CMS GC後能夠在GC次數增多的狀況下,每次GC的響應時間卻很短,好比說使用了CMS GC後通過jprofiler的觀察,GC被觸發次數很是多,而每次GC耗時僅爲幾毫秒 -XX:CMSInitiatingOccupancyFraction=73 說明年老代到73%滿的時候開始執行對年老代的併發垃圾回收(CMS)。 -XX:+UseCMSCompactAtFullCollection 打開對年老代的壓縮。可能會影響性能,可是能夠消除碎片 -XX:+CMSParallelRemarkEnabled 下降標記停頓 -XX:CMSFullGCsBeforeCompaction 因爲併發收集器不對內存空間進行壓縮、整理,因此運行一段時間之後會產生「碎片」,使得運行效率下降。此值設置運行多少次GC之後對內存空間進行壓縮、整理。多線程
http://lpy123.blog.51cto.com/6233272/1316106 參考網站:http://blog.csdn.net/lifetragedy/article/details/7708724併發
http://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html http://blog.csdn.net/toella/article/details/7297809less