如何让udhcpc 占用更少的内存?

本文探讨了system调用执行失败的原因,通常由于子进程复制父进程的VM空间过多导致。提供了修改overcommit_memory参数的临时解决方案,并推荐使用posix_spawn替代system调用,附带示例代码说明。

这个问题的表面现象是用system 调用的方式执行udhcpc 会失败。解释:由于system 是
通过fork 实现的,而子进程会复制父进程的VM 空间,当父进程占用较多VM 空间,
很容易导致system 调用失败。其本质是子进程分配VM 空间失败导致的。解决方法:
执行一下:

echo 1 > /proc/sys/vm/overcommit_memory
即可。

更好的解决办法是不使用system 调用方法,而是使用posix_spawn 调用,简单的示
例如下:

​
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <spawn.h>
#include <sys/wait.h>
int main(int argc, char* argv[])
{
    pid_t pid;
    int err;
    char *spawnedArgs[] = {"/bin/ls","-l","/home ",NULL};/* posix_spawn需要指
    定子进程的命令的全路径(绝对路径) */
    char *spawnedEnv[] = {NULL};
    printf("Parent process id=%ld\n", getpid());
    if((err=posix_spawn(&pid, spawnedArgs[0], NULL, NULL, spawnedArgs, spawnedEnv)) !=0 )
    {
        fprintf(stderr,"posix_spawn() error=%d\n",err), exit(-1);
    }
    printf("Child process id=%ld\n", pid);
    /* Wait for the spawned process to exit */
    (void)wait(NULL);
    return 0;
}

​

posix_spawn 的更多用法,请自行上网搜索。

具体来说: 外网连通性确认 IP信息确认 确认是否获得IP 网关连通性确认 确认网关是否连通 外网连通信确认 确认外网是否连通 物理关联 有线网口 有线网口是否正常连线,ip link 链路协商 查看自动协商开启状态 检查协商结果 CPU/内存占用 检测CPU占用内存占用 流控 检查流控功能是否开启 eee功能 检查EEE功能是否关闭 链路状态 带宽利用率 检测带宽利用率 组播路由/IGMP代理 检测功能开启状态 组播包统计,组播包泛滥? vlan vlan冲突检测 逻辑接口 接口状态 br-wan接口状态,brctl show,UP wan/wanv6接口状态,ifstatus wan/wanv6,UP IP配置 br-wan配置,ifconfig br-wan internet/wan/wanv6配置,ifconfig *-internet/wan/wanv6 ipv6,local ip、global ip 拨号基础 network 拨号配置查询,/etc/config/network protocol 拨号配置查询,/etc/config/protocol 拨号进程 udhcpc 检测拨号进程是否正常运行 pppd dhcp6c 外网连通性确认 【复用】 【复用】 物理关联 【复用】 【复用】 链路状态 【复用】 【复用】 vlan 【复用】 【复用】 逻辑接口 【复用】 【复用】 拨号配置 【复用】 【复用】 拨号进程 【复用】 【复用】 拨号续约 续约过期-dhcp/dhcpv6 检测renew/rebind是否得到回复 检测网络连通性 保活失败-pppoe/pppoev6 lcp保活包没有得到回复 检测网络连通性 数据转发 "L3-ipv4默认路由 ip route/route -n" 检测默认路由是否缺失 检测默认路由指向接口 检查默认路由数量 "L3-ipv6默认路由 ip -6 route (基本同上)" 检测默认路由是否缺失 检测默认路由指向接口 检查默认路由数量 "L3-ipv4静态路由 ip route/route -n" 检查静态路由指向接口 检查下一条连通性,ping 检查是否存在路由冲突-主机路由覆盖网段路由 检查是否存在路由冲突-静态路由与默认路由冲突 "L3-ipv6静态路由 ip -6 route (基本同上)" 检查静态路由指向接口 检查下一条连通性,ping 检查是否存在路由冲突 L3L2-neigh ipv4 arp检查,条目缺失、过期,IP与MAC不匹配,ip neigh/arp L3L2-neigh ipv6 neighbor检查,条目缺失、过期、IP与MAC不匹配,ip neigh L2-fdb fdb表检查,条目缺失,brctl showmacs firewall iptables 检查基本规则是否建立 检查旧规则是否清空 高级功能 backup 检查backup是否开启/etc/config/internet_backup 硬件加速 加速模块状态 开启状态检测 加速条目 加速条目匹配IP检测 局域网内部干扰 多dhcp server 检查局域网中是否存在其他的dhcp server 环路检测 检测局域网中是否存在环路
最新发布
11-26
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值