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则不会受到限制。
在此次测试中,分别使用特殊权限用户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则不会受到限制。
相关文章推荐
- Linux socket 初步
- Linux Kernel 4.0 RC5 发布!
- linux lsof详解
- linux 文件权限
- Linux 执行数学运算
- 10 篇对初学者和专家都有用的 Linux 命令教程
- Linux 与 Windows 对UNICODE 的处理方式
- Ubuntu12.04下QQ完美走起啊!走起啊!有木有啊!
- 解決Linux下Android开发真机调试设备不被识别问题
- 运维入门
- 运维提升
- Linux 自检和 SystemTap
- Ubuntu Linux使用体验
- c语言实现hashmap(转载)
- Linux 信号signal处理机制
- linux下mysql添加用户
- Scientific Linux 5.5 图形安装教程
- Linux 下无损图片压缩小工具介绍