ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

pthread_create中Resource temporarily unavailable问题

2019-07-12 13:55:17  阅读:301  来源: 互联网

标签:temporarily Resource unavailable unlimited kbytes 线程 memory 虚拟内存 size


有台设备发现程序启动失败,上去通过日志发现是线程启动(pthread_create)失败,进一步定位,打印errno:11,Resource temporarily unavailable。

但是发现失败前不管是top还是free,还是swap虚拟内存都不高,不存在内存不足的问题。

百度发现说是ulimit给的线程数量不足。

ulimit -a

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 257733
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 30000
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 1024
virtual memory          (kbytes, -v) 1200000
file locks                      (-x) unlimited

进程1024个完全足够,出于实验目的,修改为更大的数字,但是发现进程只能启动几十个线程,尝试修改其他参数,发现最多只能启动115个线程。

只好和其他设备进行对比,发现其他设备的信息是
virtual memory (kbytes, -v) unlimited
于是进行修改,发现启动正常。

查了下资源,线程占用的虚拟内存很高,但是实际上并不使用,只是计算一个预计的大小,所以swap依然会是0
一个线程占用的虚拟内存是根据stack size来设置的,这个设备刚好是10240,1200000/10240=117.18,所以启动了115个线程。

标签:temporarily,Resource,unavailable,unlimited,kbytes,线程,memory,虚拟内存,size
来源: https://blog.51cto.com/xzq2000/2419669

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有