java.lang.OutOfMemoryError: pthread_create (1040KB stack) failed: Out of memory at java.lang.Thread

//Bug 설명linux pthread 생성 루틴 error, 메모리 스택 넘침
java.lang.OutOfMemoryError: pthread_create (1040KB stack) failed: Out of memory
	at java.lang.Thread.nativeCreate(Native Method)
	at java.lang.Thread.start(Thread.java:753)
	at java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:970)
	at java.util.concurrent.ThreadPoolExecutor.processWorkerExit(ThreadPoolExecutor.java:1038)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1180)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
	at java.lang.Thread.run(Thread.java:784)

라인이 너무 많이 만들어졌나 봐요. 코드가 불합리한 부분이 있어요.
이것은 회사 프로젝트의 버그입니다. 원래 쓴 코드는 매우 규범에 맞지 않습니다.
프로젝트에서 라인을 함부로 사용하는 곳은 유사하다
1.timer가 사용하는 시간은 매번 new입니다. 원래는 방출되지 않았습니다.(프로젝트의 서비스에서 매번 new Timer, 자원 낭비)
2. OKHttpClient가 여러 개 있습니다.
3. 라인을 빈번하게 만드는 곳에는 스레드 탱크가 없습니다.
4. 프로젝트에 한 번의 포지셔닝이 있는데 매번 new AMapClient에서 한 번의 포지셔닝을 합니다. 포지셔닝이 완료되면 stopLocation()이 떨어지지 않고 서비스도 있습니다.
중, 라인이 갈수록 늘어나면 stack OOM을 유발한다
기본적인 해결 사고방식은 다음과 같다.코드 라인을 보고 방출이 불합리한 부분을 만들어 최적화합니다.
2. bugly를 통합하고 buglog를 보고 다른 라인을 보면 많은 라인이 있는데 그 중에서 중복된 라인은 불합리한 부분이다.

좋은 웹페이지 즐겨찾기