版权声明:转载的时候请注明转载路径~~~ https://blog.csdn.net/kellyseeme/article/details/51501163
在linux中,进行无限创建进程之后,会消耗大量的内存。
在此次测试中,分别使用特殊权限用户root和一般用户kel进行测试。
查看ulimit值如下:
[root@python 524]# 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) 7824
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) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 1024
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
从上面的可以看出,用户最大的进程数是1024,但是在测试中发现root用户并不受限于此限制,可以无限的创建进程,但是一般用户就会收到此限制,也就是说root用户的权限还是很叼的。
测试脚本如下所示:
#!/usr/bin/env python
import multiprocessing
import time
def walker():
time.sleep(100)
for i in range(1100):
t = multiprocessing.Process(target=walker)
t.start()
print t.name
在进行超级用户测试的时候,报错内容如下:
扫描二维码关注公众号,回复:
5363939 查看本文章
表示在创建进程的时候,消耗大量的内存,当内存消耗完毕之后,自动杀掉进程。
不但杀掉了进程,而且。。。。ssh服务都不可用了,如下所示:
使用的是远程连接服务器,导致了ssh服务的假死,,,线程中断,无法登陆,必须重新启动ssh服务,
这种情况比较诡异,按照道理来说,就算消耗大量的内存,那也应该只杀死占用内存的进程,而不是干掉ssh服务,可能的情况就是,这个ssh服务作为了所有进程的父进程,在内存消耗的时候,直接干掉此进程了,所以导致ssh服务dead。
在进行一般用户测试的时候,会收到ulimit的限制,如果超出了限制,那么报错如下:
Traceback (most recent call last):
File "thread_demo.py", line 12, in <module>
t.start()
File "/usr/local/python/lib/python2.7/multiprocessing/process.py", line 130, in start
self._popen = Popen(self)
File "/usr/local/python/lib/python2.7/multiprocessing/forking.py", line 121, in __init__
self.pid = os.fork()
OSError: [Errno 11] Resource temporarily unavailable
表示,操作系统错误,资源暂时不可用,其实就是超出了最大进程数的范围,不是内存的范围。
修改普通的用户ulimit值之后,发现又可以继续创建进程了,在不超过内存的情况下:
[kel@python root]$ cat /etc/security/limits.conf |grep kel
kel soft nproc 1101
kel hard nproc 1101
查看修改之后的:
[kel@python root]$ 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) 7824
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) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 1101
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
再进行运行,发现可以正确执行,从而进程在普通用户的情况下主要受制于ulimit的限制,而超级用户root则不会受到限制。