- 论坛徽章:
- 0
|
我有一个较大型的程序,运行在mipsel的嵌入式平台上,程序开始运行system调用是成功的,启动后调用system会失败,进行如下分析:
1.跟踪:
system()
-> fork(): Cannot allocate memory【自己实现system发现fork调用失败】
-> clone(child_stack=0, flags=0x100012) = -1 ENOMEM (Cannot allocate memory) (errno 12)【strace】
以上均显示错误确为ENOMEM(ENOMEM fork failed to allocate the necessary kernel structures because memory is tight.)
应该是内核空间不足!可malloc的内存很充足。
2.测试
在该程序运行的同时运行一个小进程,system调用是成功的。
综上分析为:单独进程的内核内存空间有限制
·尝试过
~ 修改overcommit_ratio -- NO
~ 增加cmdline中的mem参数 -- 略有改善而已
~ 增大ulimt相关限制 -- 情况更差
另:内核为linux 2.6.18,工具链为uClibc-nptl-0.9.29-20070423。
C版藏龙卧虎,向大家请教,N人给个提示~~ |
|