linux创建进程消耗内存

版权声明:转载的时候请注明转载路径~~~ 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则不会受到限制。




猜你喜欢

转载自blog.csdn.net/kellyseeme/article/details/51501163