- 论坛徽章:
- 0
|
10可用积分
- 程序一:
- #include<stdio.h>
- #include<stdlib.h>
- main()
- {
- while(malloc(1024))usleep(40);
- perror("error");
- }
- 程序二:
- #include<stdio.h>
- #include<stdlib.h>
- main()
- {
- while(malloc(1024));
- perror("error");
- }
复制代码
程序二运行后,系统马上失去响应,内存耗尽。
程序一运行后,系统内存只有缓慢增长。
程序一中的usleep(40)起了什么作用呢?
系统环境
bash# SPident
CONCLUSION: System is up-to-date!
found SLES-9-x86_64-SP3
top命令
top - 16:56:45 up 2:31, 7 users, load average: 37.72, 37.96, 40.61
Tasks: 268 total, 1 running, 249 sleeping, 17 stopped, 1 zombie
Cpu(s): 2.6% us, 2.9% sy, 0.0% ni, 93.7% id, 0.8% wa, 0.0% hi, 0.0% si
Mem: 1859344k total, 948864k used, 910480k free, 37172k buffersSwap: 0k total, 0k used, 0k free, 91328k cached
bash # ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) unlimited
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
stack size (kbytes, -s) unlimited
cpu time (seconds, -t) unlimited
max user processes (-u) 14845
virtual memory (kbytes, -v) unlimited |
最佳答案
查看完整内容
昨天有空,进行了一些测试,分享一下结果(测试环境:kernel 2.6.31 64bit, 1.8G ram, swap disabled)对于进程每一次虚拟地址的分配请求,kernel会根据参数vm.overcommit_memory、vm.max_map_count(可以通过sysctl进行调节),决定是否放行。1. 如果 进程已分配的虚拟空间段的数量 >= vm.max_map_count,分配失败2. 如果 vm.overcommit_memory = 1,放行 vm.overcommit_memory = 0, 则会比较 a)此次请求分配的虚拟内存大小 ...
|