SIGXFSZ信号

背景

    同事用go写了一个简单转发业务流量的工具。跑了9个小时coredump。直接被冲击了三观(go也会coredump?),最后分析了看,是测试机器设置不当导致的,测试人员把日志文件重定向到终端,日志文件大小超过终端限制(这值可人为设置,默认没有大小限制),最后操作系统向服务端发送了SIGXFSZ信号,下面聊下罪魁祸首SIGXFSZ信号


什么情况下系统会发送SIGXFSZ信号

    在linux/unix系统里定义了一些异步的机制。这个就是信号。

    其中有个信号名为SIGXFSZ。当某个进程写文件,单个文件大小超出限制,这时操作系统会向它发送SIGXFSZ。

    SIGXFSZ信号的默认动作是:终止进程+生成coredump文件。


如何设置单个文件最大限制

    1.在shell层次限制

 ulimit -f value #其中 value * blocks(默认1024字节) = 最大限制的字节数

    2.在c语言层次限制

 struct rlimit new_rlim;
 int rv;
 new_rlim.rlim_cur = new_rlim.rlim_max = 10; //跟shell不同,c里面的大小代表其实字节数
 rv = setrlimit(RLIMIT_FSIZE, &new_rlim);
 if (rv != 0) {
     printf("%d:(%s)\n", rv, strerror(errno));
     return -1;
 }


如何消除单个文件最大限制

    1.在shell层次去掉限制

ulimit -f unlimited

    2.在c语言层次去掉限制

 struct rlimit new_rlim;
 int rv;
 new_rlim.rlim_cur = new_rlim.rlim_max = -1; //跟shell不同,c里面的大小代表其实字节数
 rv = setrlimit(RLIMIT_FSIZE, &new_rlim);
 if (rv != 0) {
     printf("%d:(%s)\n", rv, strerror(errno));
     return -1;
 }


转载于:https://my.oschina.net/guonaihong/blog/511342

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值