您的位置:首页 > 运维架构 > Linux

linux创建进程消耗内存

2016-05-25 20:11 381 查看
在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

在进行超级用户测试的时候,报错内容如下:



表示在创建进程的时候,消耗大量的内存,当内存消耗完毕之后,自动杀掉进程。

不但杀掉了进程,而且。。。。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则不会受到限制。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息