我一直在做一个项目,移动应用程序调用我的java应用程序并存储数据。我在虚拟实例的日志中至少每10次看到以下错误。我确信这不是应用程序错误。
18 threadpool_pthread_impl.cc:51] Check failed: res == 0 (11 vs. 0) pthread_create failed
***检查故障堆栈跟踪:***
我在内核中检查了我的线程最大值
cat /proc/sys/kernel/threads-max
线程最大值->508172
我可以看到交换内存为14GB,堆栈大小为8MB,最大用户处理器为4096
我试图找到一个解决方案已经有很长一段时间了,但没有找到。
我确信这不是应用程序错误。
你很可能搞错了。常见的原因是在线程退出后没有加入线程,或者创建没有绑定的新线程。
错误11是EAGAIN
,这意味着某个限制已用尽。发件人pthread_create:
EAGAIN
遇到系统对线程数量的限制。有许多限制可能会触发此错误:达到了RLIMIT_NPROC软资源限制(通过setrlimit(2(设置(,该限制限制了真实用户ID的进程和线程数量;达到了内核对进程和线程数量的系统范围限制/proc/sys/kernel/threads max(见proc(5((;或达到pid的最大数量/proc/sys/kernel/pid_max(参见proc(5((。
最大用户处理器为4096
你指的是max user processes
。这似乎很低(注意,这会计算当前用户创建的所有进程中的所有线程(。我会先把它设置得更高。