Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1675808
  • 博文数量: 818
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 5758
  • 用 户 组: 普通用户
  • 注册时间: 2016-11-11 09:12
个人简介

To be a better coder

文章分类

全部博文(818)

文章存档

2020年(161)

2019年(214)

2018年(216)

2017年(145)

2016年(82)

分类: LINUX

2020-09-28 14:04:49

https://blog.csdn.net/weixin_30552811/article/details/99522993

I remember I typed  "./client localhost & ./client localhost & ...." for repeating over 500+ times , in testing some network program.
And when I met some kind of stuck in the program, I got the error Resource temporarily unavailable, then can't start more client to test.
Even more, I can't even start a console terminator.

Here come the explanation :

Linux系统中每个线程都拥有独立的栈空间,而我的系统上调用ulimit -a看到的结果如下:

[dengwei@localhost ~]$ 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)  15916
max locked memory       (kbytes, -l)  64
max memory size         (kbytes, -m) unlimited
open files                      (-n)  1024
pipe size            ( 512 bytes, -p)  8
POSIX message queues     (bytes, -q)  819200
real-time priority              (-r)  0
stack size              (kbytes, -s)  8192
cpu time               (seconds, -t) unlimited
max user processes              (-u)  1024
virtual memory          (kbytes, -v) unlimited

file locks                      (-x) unlimited 

 可以看到stack size是8M, 400个线程就需要8*400=3200M,虚拟内存不够用。

解决办法有两种:

1.使用ulimit -s 1024*1024命令,将线程栈大小临时设置成1M,经过试验能同时创建2000个线程了。

2.使用pthread_attr_setstacksize在程序中改变线程栈大小。

阅读(1089) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~