system() 函数执行遇到 Cannot allocate memory
来源:互联网 发布:汽车配件管理销售软件 编辑:程序博客网 时间:2024/05/17 06:50
int iRet=system("ls -l"); if (0 != iRet) { PRERR("system(\"ls -l\") %s",strerror(errno)); }
运行结果:ERR: system("ls -l") Cannot allocate memory File:../can/can.c, Line:186, Function:init_CanFrameData
分析:
1.
top命令:
Mem: 54580K used, 2540K free, 0K shrd, 0K buff, 20728K cached
CPU: 0.1% usr 1.3% sys 0.0% nic 98.4% idle 0.0% io 0.0% irq 0.0% sirq
Load average: 3.92 4.06 4.10 2/131 12094
PID PPID USER STAT VSZ %MEM CPU %CPU COMMAND
4282 2563 root R 2156 3.7 0 1.0 top
2.
[root@mbike comm]# cat /proc/meminfo
MemTotal: 57120 kB
MemFree: 2300 kB
Buffers: 0 kB
Cached: 20732 kB
SwapCached: 0 kB
Active: 23632 kB
Inactive: 15012 kB
Active(anon): 17928 kB
Inactive(anon): 32 kB
Active(file): 5704 kB
Inactive(file): 14980 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 17944 kB
Mapped: 8116 kB
Shmem: 48 kB
Slab: 5332 kB
SReclaimable: 2120 kB
SUnreclaim: 3212 kB
KernelStack: 1048 kB
PageTables: 960 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 28560 kB
Committed_AS: 554924 kB
VmallocTotal: 811008 kB
VmallocUsed: 4488 kB
VmallocChunk: 801788 kB
3.
[root@mbike comm]# cat /proc/sys/vm/overcommit_memory
0
该文件指定了内核针对内存分配的策略,其值可以是0、1、2。
0,表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1,表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2,表示内核允许分配超过所有物理内存和交换空间总和的内存(参照overcommit_ratio)。
结论:
可能是被fork的进程的虚拟地址空间占用太多,同时你的overcommit参数设置为0,当虚拟地址空间占用超过一定量(物理内存和swap计算)后,就会失败.
优化一下程序的内存使用量或者overcommit_memory设置为其他值
- system() 函数执行遇到 Cannot allocate memory
- TIP: system errno 12 Cannot allocate memory
- Android cannot allocate memory
- 执行Runtime.exec异常: error=12,Cannot allocate memory
- swapoff错误Cannot allocate memory
- mprotect() failed: Cannot allocate memory
- linux java Cannot allocate memory
- error='Cannot allocate memory'
- 编译安装php时遇到virtual memory exhausted: Cannot allocate memory
- virtual memory exhausted:cannot allocate memory
- virtual memory exhausted:Cannot allocate memory
- virtual memory exhausted: Cannot allocate memory
- virtual memory exhausted: Cannot allocate memory
- ubuntu mount windos share目录,遇到mount error(12): Cannot allocate memory
- JDK1.6 Runtime.getRuntime().exec(cmd)执行错误:Cannot allocate memory
- mount error 12 = Cannot allocate memory
- mount error 12 = Cannot allocate memory
- mount error(12): Cannot allocate memory解决办法
- Eclipse中Tomcat插件的使用说明
- 分冶法之归并排序
- Asynchttpclient的使用及请求与响应封装
- hdu1505city game dp
- 凌凯短信Webservice接口报错解决办法
- system() 函数执行遇到 Cannot allocate memory
- 用cxf编写基于spring的webservice之上篇
- C++学习之如何理解*&,即指针的引用
- UE设置
- Android onMeasure()
- [教程] Jsmooth打包Jar生成exe文件,实现不装Java环境运行
- 自定义UIActionSheet的颜色IOS8前后的区别
- 不得不的智慧
- 23种设计模式