1、線程cpu占用過高 1. top命令發現java程式長時間占用過高的cpu 2. ps H pid,tid,%cpu | grep 進程號PID 3. 使用java工具jstack jstack PID 發現具體線程情況 4. 將tid線程轉換為十六進位去查找具體的線程 5. echo 'oba ...
1、線程cpu占用過高
1. top命令發現java程式長時間占用過高的cpu
2. ps H pid,tid,%cpu | grep 進程號PID
3. 使用java工具jstack jstack PID 發現具體線程情況
4. 將tid線程轉換為十六進位去查找具體的線程
5. echo 'obase=16;ibase=10;23425' | bc
2、發現長時間沒有結果
1. 使用java工具jstack jstack PID 發現具體線程情況
2. 查看時否有死鎖deadlock
3、OMM情況
1、棧幀過多導致
查看遞歸方法是否有正確的出口
查看相互引用調用 使用 @JsonIgnore
2、棧幀過大
3、Java heap space
jps查看具體的進程id
jmap -heap 進程id 查看堆記憶體情況
jconsole 可視化界面查看具體的堆記憶體使用情況
jvisualvm 可視化界面查看
設置棧大小 -Xss 1M
設置堆大小 -Xmx 4G
問題:是否棧設置的越大越好
不是,物理記憶體固定的情況下,棧設置的越大意味著能夠並行的線程越少,同樣影響程式運行的時間