免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: soway
打印 上一主题 下一主题

系统在内存用光后一直要死不活的样子 [复制链接]

论坛徽章:
0
71 [报告]
发表于 2008-09-03 20:08 |只看该作者
原帖由 soway 于 2008-9-2 23:08 发表


我猜测会over的,单独消耗内存很简单,你malloc一段内存,不断循环,肯定over。
那段限制,好像对rss没效果,很奇怪,后面限制进程部分都有效的。

OK,这次测试OK了~
未测试前的内存情况:
Every 1.0s: free -m                                           Sun Apr 13 11:07:49 2008

             total       used       free     shared    buffers     cached
Mem:           248        189         58          0         26        120
-/+ buffers/cache:         43        205
Swap:          511          0        511

看吧,准备执行死循环代码:
  1. :(){ :|:& };:
复制代码

[test@test ~]$ ){ :& };:
[1] 6705
[test@test ~]$


随后就死机了
[test@test ~]$ lsl
-bash: lsl: command not found
[1]+  Done                    : | :
[test@test ~]$
[test@test ~]$ ps -ef


另外一个root窗口看内存状态都死了

Every 1.0s: free -m                                           Fri Apr 11 17:31:17 2008

             total       used       free     shared    buffers     cached
Mem:           248        235         12          0          2         22
-/+ buffers/cache:        211         37
Swap:          511         76        435


虚拟机进程都死掉了。我的汗,真卡,硬盘灯长亮。我的系统都要死机了。。。。。
先发到这里 ,我重起机器

[ 本帖最后由 剑次狼 于 2008-9-3 20:33 编辑 ]

1.PNG (8.61 KB, 下载次数: 7)

1.PNG

论坛徽章:
0
72 [报告]
发表于 2008-09-03 20:30 |只看该作者
还好我只分给虚拟机系统256MB。不然真得重起机器了。(手上没测试环境了,很郁闷)
开虚拟机继续继续测试

写限制脚本:
cat /etc/profile.d/ulimit.sh
if [ $UID -ge 500 ]
then
ulimit -v 10000  
ulimit -m 10000
ulimit -u 5
fi



设置限制用户范围
-ge 500
设置UID包含500和500以上的用户

虚拟内存(virtual memory):
ulimit -v 10000
限制了单个进程最多能够使用10M内存, 超出该限制终端将会收到一个内存不足的错误.

最大驻留集大小(maximum resident set size):
ulimit -m 10000
限制单个进程实际能驻留在RAM中的代码和数据大小不能超过10M.

最大用户进程数(max user processes):
ulimit -u 5
限制当前用户同时不能超过拥有5个进程数.
注意的是设置完此脚本如果是用户测试要重新登陆


看现在的内存使用情况
Every 1.0s: free -m                                           Sun Apr 13 11:05:54 2008

             total       used       free     shared    buffers     cached
Mem:           248        189         58          0         26        120
-/+ buffers/cache:         43        205
Swap:          511          0        511


好开始重复死亡测试:
[test@test ~]$ LANG=
[test@test ~]$ ){ :& };:
-bash: fork: Resource temporarily unavailable
-bash: fork: Resource temporarily unavailable
[1] 4262
-bash: fork: Resource temporarily unavailable
[test@test ~]$ -bash: fork: Resource temporarily unavailable
-bash: fork: Resource temporarily unavailable
){ :& };:
-bash: fork: Resource temporarily unavailable
-bash: fork: Resource temporarily unavailable
[4] 4321
[3]   Exit 128                : | :
-bash: fork: Resource temporarily unavailable
[test@test ~]$ -bash: fork: Resource temporarily unavailable
){ :& };:
-bash: fork: Resource temporarily unavailable
-bash: fork: Resource temporarily unavailable
[5] 4333
[4]   Exit 128                : | :
-bash: fork: Resource temporarily unavailable
[test@test ~]$ ){ :& };:
[6] 4343
[5]   Exit 128                : | :
[test@test ~]$ -bash: fork: Resource temporarily unavailable

[6]+  Terminated              : | :
[test@test ~]$ ){ :& };:
[1] 4350
-bash: fork: Resource temporarily unavailable
[test@test ~]$ ){ :& };:
-bash: fork: Resource temporarily unavailable
-bash: fork: Resource temporarily unavailable
[2] 4355
[1]   Terminated              : | :
-bash: fork: Resource temporarily unavailable
[test@test ~]$ id
uid=501(test) gid=501(test) groups=501(test) context=user_u:system_r:unconfined_t
[1]+  Exit 128                : | :
[test@test ~]$ free -m
             total       used       free     shared    buffers     cached
Mem:           248        190         58          0         26        120
-/+ buffers/cache:         43        205
Swap:          511          0        511
[test@test ~]$ ps -ef|grep test
root      4218  2620  0 11:08 ?        00:00:00 sshd: test [priv]
test      4221  4218  0 11:08 ?        00:00:00 sshd: test@pts/3
test      4222  4221  0 11:08 pts/3    00:00:00 -bash
test      4296  4222  0 11:08 pts/3    00:00:00 ps -ef
test      4297  4222  0 11:08 pts/3    00:00:00 grep test


OK。没问题,可以正常操作一切,内存也才增加限制以内的~测试限制完全OK!

论坛徽章:
0
73 [报告]
发表于 2008-09-03 21:23 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
74 [报告]
发表于 2008-09-03 21:48 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
75 [报告]
发表于 2008-09-03 21:51 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
76 [报告]
发表于 2008-09-03 22:01 |只看该作者
原帖由 soway 于 2008-9-3 21:51 发表


剑 同学很认真 自己动手做了很多测试,多谢了!
代码编辑注意点儿,不然大家看到的就是表情符号来。

死循环代码我特地用code索引出来了。就在执行死循环测试那句下面:

论坛徽章:
0
77 [报告]
发表于 2008-09-03 22:02 |只看该作者
原帖由 soway 于 2008-9-3 21:48 发表


尽量先不要设置限制进程数

不过你的设置好像是可以的

明天去公司测试一下。

进程数是参照写的呵呵,等会我忙玩手上活,再去掉测试次。

论坛徽章:
0
78 [报告]
发表于 2008-09-03 22:10 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
79 [报告]
发表于 2008-09-03 22:21 |只看该作者
原帖由 soway 于 2008-9-3 22:10 发表


进程限制不能写,不然你的代码如果fork出来多个子进程,就会先达到这个限制。
我没仔细看你的代码,明天我会去写一个大量占用内存的代码测试一下。

我是通过/etc/security/limits.conf 文件限制的rss, ...

OK,我也测试成功,按你的要求。

首先我建立个20M的文件。不做限制用test帐户vi下。(vi 20M的文件真慢,我的可是虚拟机啊。要请我吃饭哦~嘿嘿
  1. [test@test /]$ du -sh 1.test
  2. 21M     1.test
  3. [test@test /]$ vi 1.test
  4. ^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
  5. "1.test" [readonly][noeol] 1L, 20971520C
复制代码


可以正常打开吧。接下来我把限制加上。
  1. [root@test ~]# cat /etc/profile.d/ulimit.sh
  2. if [ $UID -ge 500 ]
  3. then
  4. ulimit -v 10000
  5. ulimit -m 10000
  6. fi
  7. [root@test ~]#
复制代码


test帐户重新登陆下让限制生效。

  1. [test@test ~]$ LANG=
  2. [test@test ~]$ cd /
  3. [test@test /]$ du -sh 1.test
  4. 21M     1.test
  5. [test@test /]$ vi 1.test



















  6. "1.test"
  7. E342: Out of memory!  (allocating 3285009 bytes)
  8. "1.test" [readonly][READ ERRORS] 0L, 3284992C
  9. Hit ENTER or type command to continue
复制代码



这样如何?能满足你的测试要求了吧?

[ 本帖最后由 剑次狼 于 2008-9-3 22:23 编辑 ]

论坛徽章:
0
80 [报告]
发表于 2008-09-03 22:35 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP