现象:长时间跑某个测试用例,一段时间后程序停止,抓取logcat报:
pthread_create failed: couldn't mprotect PROT_NONE 4096-byte stack guard region: Out of memory
原因:经排查,发现c++层中某个函数会不断的调用pthread_create()创建线程,但线程运行完却没有detach释放相关资源,导致系统内存被耗光
解决办法:
有两种解决办法:
1.在线程执行结束后调用pthread_detach释放资源
pthread_detach(pthread_self());
2.创建线程前设置 PTHREAD_CREATE_DETACHED 属性
pthread_attr_t attr;
pthread_t thread;
pthread_attr_init (&attr);
pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED);
pthread_create (&thread, &attr, &thread_function, NULL);
pthread_attr_destroy (&attr);