線上發(fā)生java.lang.OutOfMemoryError: unable to create new native thread,排查思路。
1.進(jìn)入docker容器內(nèi)部
docker exec -it node-ftmp bash
2.導(dǎo)出線程dump文件
jstack -l <pid> > threadDump.txt
jstack -l 19 > threadDump.txt
3.退出docker環(huán)境
exit
4.拷貝dump文件到宿主機(jī)
docker cp node-ftmp:/home/fssc/node-FTMP/threadDump.txt /home
- 下載到本地分析
threadDump.txt文件有5M多,一行一行看不方便。上工具 IBM JCA
https://www.ibm.com/support/pages/ibm-thread-and-monitor-dump-analyzer-java-tmda

image.png
-
有5000多個(gè)線程為parked狀態(tài),說明代碼中有大量的空閑線程。
我們可以在這個(gè)界面查看每一個(gè)線程的情況。
image.png
7.幾個(gè)小時(shí)候又下載了一份線程dump文件,對比兩次線程數(shù)量

image.png
- 發(fā)現(xiàn)以pool-為前綴的線程,增加較多,應(yīng)該是線程池產(chǎn)生線程沒有正常關(guān)閉銷毀導(dǎo)致。后面就可以去分析代碼了。
