错误日志

vim /var/log/messages-20170723

85319 Jul 23 03:26:01 mimvp-bj kernel: __ratelimit: 586 callbacks suppressed

85320 Jul 23 03:26:01 mimvp-bj kernel: php-fpm[30712]: segfault at 7fcc0e397ae0 ip 00007f9e0935e7e5 sp 00007fff0949d1d0 error 4 in xcache.so[7f9e09344000+2 5000]

85321 Jul 23 03:26:01 mimvp-bj kernel: php-fpm[30713]: segfault at 7fcc0e397ae0 ip 00007f9e0935e7e5 sp 00007fff0949d1d0 error 4 in xcache.so[7f9e09344000+2 5000]

85322 Jul 23 03:26:01 mimvp-bj kernel: php-fpm[30714]: segfault at 7fcc0e397ae0 ip 00007f9e0935e7e5 sp 00007fff0949d1d0 error 4 in xcache.so[7f9e09344000+2 5000]

85323 Jul 23 03:26:01 mimvp-bj kernel: php-fpm[30717]: segfault at 7fcc0e397ae0 ip 00007f9e0935e7e5 sp 00007fff0949d1d0 error 4 in xcache.so[7f9e09344000+2 5000]

85324 Jul 23 03:26:01 mimvp-bj kernel: php-fpm[30718]: segfault at 7fcc0e397ae0 ip 00007f9e0935e7e5 sp 00007fff0949d1d0 error 4 in xcache.so[7f9e09344000+2 5000]

85325 Jul 23 03:26:01 mimvp-bj kernel: php-fpm[30716]: segfault at 7fcc0e397ae0 ip 00007f9e0935e7e5 sp 00007fff0949d1d0 error 4 in xcache.so[7f9e09344000+2 5000]

85326 Jul 23 03:26:01 mimvp-bj kernel: php-fpm[30715]: segfault at 7fcc0e397ae0 ip 00007f9e0935e7e5 sp 00007fff0949d1d0 error 4 in xcache.so[7f9e09344000+2 5000]

系统环境

# uname -a

Linux mimvp-bj 2.6.32-431.23.3.el6.x86_64 #1 SMP Thu Jul 31 17:20:51 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

# cat /etc/issue

CentOS release 6.5 (Final)

错误分析

Jul 23 03:26:01 mimvp-bj kernel: __ratelimit: 586 callbacks suppressed 的报错的原因不是很理解,上网详细查询总结,记录如下:

__ratelimit: N callbacks suppressed 表示内核阻止了N条syslog消息,这是因为系统重复的日志过多,写日志频率过高,输出太快,被内核中的net_ratelimit()限制了syslog消息写入。

rate limit也是Linux为了避免DoS攻击的一种机制,避免每个消息都被记录(会导致存储空间撑爆)。

当内核记录消息,使用printk()通过这种机制来检查是否输出日志。

这个限制可以通过 /proc/sys/kernel/printk_ratelimit 和 /proc/sys/kernel/printk_ratelimit_burst 来调优配置。

默认配置(RHEL6)分别是5和10。也就是说,内核允许每5秒记录10条消息。超过这个限制,内核就会抛弃日志,并记录ratelimit N: callbacks suppressed。

#  cat /proc/sys/kernel/printk_ratelimit

5

#  cat /proc/sys/kernel/printk_ratelimit_burst

10

然而,在内核的网络代码中有自己的限制配置(逻辑相同,但是是独立的配置) /proc/sys/net/core/message_cost和/proc/sys/net/core/message_burst,默认配置也是5和10。这里message_cost也是日志采样时间。

# cat /proc/sys/net/core/message_cost

5

# cat /proc/sys/net/core/message_burst

10

如果要关闭ratelimit机制,也就是允许每个消息都记录下来,则可以设置message_cost值为0

sysctl -w net.core.message_cost=0

注意:关闭ratelimit,系统就可能存在被日志攻击的风险。

解决方案

segfault at xxx ip xxx sp xxx error 4

通过 sudo cat /var/log/messages | grep segfault 或者 sudo dmesg | grep segfault 获得

sudo cat /var/log/messages | grep segfault

# sudo cat /var/log/messages | grep segfault

Jul 23 08:54:17 mimvp-bj kernel: php-fpm[9730]: segfault at 7f3dc1609ae0 ip 00007effee78a7e5 sp 00007fffc4aa0120 error 4 in xcache.so[7effee770000+25000]

Jul 23 08:54:17 mimvp-bj kernel: php-fpm[9738]: segfault at 7f3dc1609ae0 ip 00007effee78a7e5 sp 00007fffc4aa0120 error 4 in xcache.so[7effee770000+25000]

Jul 23 08:54:17 mimvp-bj kernel: php-fpm[9737]: segfault at 7f3dc1609ae0 ip 00007effee78a7e5 sp 00007fffc4aa0120 error 4 in xcache.so[7effee770000+25000]

Jul 23 08:54:18 mimvp-bj kernel: php-fpm[9732]: segfault at 7f3dc15fe870 ip 00007effee78a7e5 sp 00007fffc4aa0120 error 4 in xcache.so[7effee770000+25000]

Jul 23 08:54:18 mimvp-bj kernel: php-fpm[9735]: segfault at 7f3dc15fe870 ip 00007effee78a7e5 sp 00007fffc4aa0120 error 4 in xcache.so[7effee770000+25000]

Jul 23 08:54:18 mimvp-bj kernel: php-fpm[9739]: segfault at 7f3dc15fe870 ip 00007effee78a7e5 sp 00007fffc4aa0120 error 4 in xcache.so[7effee770000+25000]

Jul 23 08:54:18 mimvp-bj kernel: php-fpm[9733]: segfault at 7f3dc15fe870 ip 00007effee78a7e5 sp 00007fffc4aa0120 error 4 in xcache.so[7effee770000+25000]

Jul 23 08:54:18 mimvp-bj kernel: php-fpm[9736]: segfault at 7f3dc15fe870 ip 00007effee78a7e5 sp 00007fffc4aa0120 error 4 in xcache.so[7effee770000+25000]

sudo dmesg | grep segfault

# sudo dmesg | grep segfault

php-fpm[9730]: segfault at 7f3dc1609ae0 ip 00007effee78a7e5 sp 00007fffc4aa0120 error 4 in xcache.so[7effee770000+25000]

php-fpm[9738]: segfault at 7f3dc1609ae0 ip 00007effee78a7e5 sp 00007fffc4aa0120 error 4 in xcache.so[7effee770000+25000]

php-fpm[9737]: segfault at 7f3dc1609ae0 ip 00007effee78a7e5 sp 00007fffc4aa0120 error 4 in xcache.so[7effee770000+25000]

php-fpm[9732]: segfault at 7f3dc15fe870 ip 00007effee78a7e5 sp 00007fffc4aa0120 error 4 in xcache.so[7effee770000+25000]

php-fpm[9735]: segfault at 7f3dc15fe870 ip 00007effee78a7e5 sp 00007fffc4aa0120 error 4 in xcache.so[7effee770000+25000]

php-fpm[9739]: segfault at 7f3dc15fe870 ip 00007effee78a7e5 sp 00007fffc4aa0120 error 4 in xcache.so[7effee770000+25000]

这种信息一般都是由内存访问越界造成的,不管是用户态程序还是内核态程序访问越界都会出core, 并在系统日志里面输出一条这样的信息。这条信息的前面分别是访问越界的程序名,进程ID号,访问越界的地址以及当时进程堆栈地址等信息,比较有用的信息是最后的error number.

在上面的信息中,error number是4,下面详细介绍一下error number的信息:

在上面的例子中,error number是6,转成二进制就是110, 即bit2=1, bit1=1, bit0=0

按照上面的解释,我们可以得出这条信息是由于用户态程序读操作访问越界造成的

error number是由三个字位组成的,从高到底分别为bit2 bit1和bit0,所以它的取值范围是0~7

bit2: 值为1表示是用户态程序内存访问越界,值为0表示是内核态程序内存访问越界

bit1: 值为1表示是写操作导致内存访问越界,值为0表示是读操作导致内存访问越界

bit0: 值为1表示没有足够的权限访问非法地址的内容,值为0表示访问的非法地址根本没有对应的页面,也就是无效地址

例如:

Nov  3 09:27:50 ip-172-31-18-210 kernel: [12702742.866113] nginx[53350]: segfault at 1b852e2 ip 00007f9085b3b616 sp 00007ffdf15f1368 error 4 in libc-2.17.so[7f90859ec000+1b7000]

Nov  3 09:27:53 ip-172-31-18-210 kernel: [12702745.500928] nginx[53338]: segfault at 1b852e2 ip 00007f9085b3b616 sp 00007ffdf15f1368 error 4 in libc-2.17.so[7f90859ec000+1b7000]

Nov  3 09:28:31 ip-172-31-18-210 kernel: [12702783.579077] nginx[53339]: segfault at 1d4efc0 ip 00007f9085b3b616 sp 00007ffdf15f1338 error 4 in libc-2.17.so[7f90859ec000+1b7000]

Linux下打开core文件,定位segfault

source:http://mimvp.com

出现段错误,不容易定位到底是哪行代码出现了问题,segfault多次折磨的笔者死去活来,查资料发现了定位段错误的方法。

Linux下有核心转储文件即core文件,会把程序崩溃是的现场保存起来供gdb来调试。

打开的办法是 ulimit -c unlimited

设置之前可以调用ulimit -c 查看当前的大小,

# ulimit -c

0

如果是0,表示不生成core文件。如果是unlimited,则不论生成的core文件有多大,都让系统生成core 文件。

注意:

这个方法有个弊端是,在那个终端上设置的ulimit就在那个终端上生效,如果你在另一个终端上执行程序,你会发现,纵然有段错误,你也没生成core文件

第二个办法是修改/root/.bash_profile 文件添加一行  ulimit -S -c  unlimited 然后保存关闭文件。

有很多linux系统/root 目录下并没有.bash_profile 文件,比如SUSE,这没有关系你自己vi 创建这个文件即可。

修改完这个文件之后,执行source /root/.bash_profile,你就可以查看你的修改生效了没有。

查看方法是 ulimit -c 你会发现,终端打印出 unlimited,

# ulimit -c

unlimited

表示你的配置生效了,你可以新开终端 执行 ulimit -c,发现新开终端也是unlimited 。

好,打开开关之后,你就可以跑你的有segfault的代码了。

一般core文件会生成在你的可执行文件所在的目录下,当然可以设定。

设定的方法是 修改

/proc/sys/kernel/core_pattern

这个文件不支持vi的方式修改,可以使用echo

如echo “/corefile/core-%p-%e-%t” > /proc/sys/kernel/core_pattern

这个语句的含义是将core文件生成在 /corefile/这个目录下

生成的文件名的格式是:“core”-“pid”-可执行程序名-段错误时间

%p ---------段错误进程的PID

%e-----------发生段错误的可执行文件名

%t------- 发生段错误的时间

还有其他配置选项。

生成了core文件,你就可以调试了,调试方法是:

gdb -c core test

注:test是你的可执行文件名。你就可以想用gdb调试文件一样调试你的core文件了。

linux系统日志报错kernel,Linux 系统日志 kernel: __ratelimit: xxx callbacks suppressed-Fun言...相关推荐

  1. linux 错误日志 __ratelimit: XXX callbacks suppressed 原因

    报错 今天线上遇到故障,php进行因为段错误退出了,系统日志中的kernel报错如下: Feb 25 22:25:11 web_server_01 kernel: __ratelimit: 250 c ...

  2. linux 硬盘报错日志,Linux内核I_O系统报错日志与硬盘故障对应关系

    Linux 内核I/O 系统报错日志与硬盘故障对应关系 Jun04 2011Leave a Comment Written by chen 日志信息 故障现象描述 与硬盘关系 scsi1: ERROR ...

  3. linux命令报错,在Linux执行命令报错”Arg list too long”的原因分析 – 运维派

    最近在SUSE LINUX操作系统中遇到个问题:在一个包含上万个文件的文件夹中执行rm *删除所有文件时报错"Arg list too long",最后导致删除失败.后来查了下资料 ...

  4. linux设置密码报错automa,Linux开发环境介绍--gautoconfautomak.pptx

    Linux开发环境介绍 简介(一) gcc/g++, Makefile, autoconf,automake,Introduction to Linux Dev Env. (Ser. 1) Compi ...

  5. linux do_irq 报错 代码,linux - 内核函数asm_do_IRQ()中的irq与我在模块中请求的不同 - 堆栈内存溢出...

    我做了一些皮质-A9开发板的实验. 我使用gpio_to_irq()获取irq num并且我请求了irq并用它写了一个小驱动程序,它在syslog中是196. 我在asm_do_IRQ中添加了一些pr ...

  6. linux 硬盘报错日志,Linux内核I/O系统报错日志与硬盘故障对应关系

    日志信息 故障现象描述 与硬盘关系 scsi1: ERROR on channel 0, id 7, lun 0, CDB: Read (10) 00 73 fc 62 bf 00 00 80 00 ...

  7. 【错误记录】编译 Linux 内核报错 ( fatal error: openssl/opensslv.h: No such file or directory )

    文章目录 一.报错信息 二.解决方案 一.报错信息 编译 Linux 内核 , 执行 sudo make 命令 , 开始正式编译 Linux 内核 , 报如下错误 : root@ubuntu:~/ke ...

  8. linux 终端报错 Out of memory: Kill process[PID] [process name] score问题分析

    转自:http://www.111cn.net/sys/CentOS/84755.htm 从Out of memory来看是内存超出了,后面的 Kill process[PID] [process n ...

  9. linux 内核 报错,根据epc定位linux内核报错.pdf

    根据epc定位linux内核报错.pdf 韩⼤卫@吉林师范⼤学 2014.12.10 转载请表明出处 ************************************************* ...

  10. linux oracle 失败怎么办,Linux开机报错unable to load selinux policy怎么办?

    Linux在开机的时候提示unable to load selinux policy错误,导致系统无法进入,通常是由2个情况所导致的,下面小编就给大家介绍下Linux开机报错unable to loa ...

最新文章

  1. 吴恩达机器学习笔记——第一章
  2. 前端学习(3324):你不知道javascript说闭包
  3. Python模块之uuid
  4. FireFox的插件
  5. 用java来实现FIFO先进先出的队列
  6. Pycharm 远程连接服务器(ssh)运行深度学习代码 | 详细步骤
  7. html鼠标悬停显示箭头,Tippy.js 玩转鼠标悬停提示信息
  8. waf绕过—过360主机卫士sql注入
  9. xls文件二进制格式
  10. 海客票务管理系统 ------ 项目总结
  11. 中国传媒大学计算机课程表,中国传媒大学播本课表.pdf
  12. 书写软件之钢笔笔迹实现(一)
  13. 临界Hashgard:读懂智能合约与虚拟机,看这一篇就够了!
  14. Centos 7iso百度网盘下载
  15. boost spirit 解析字符串 (一)
  16. C语言位操作详解-4.2.C语言专题第二部分-朱有鹏-专题视频课程
  17. Haproxy[转载]
  18. 03 计算(a+b)/c的值
  19. 网络安全系列-五十一:网络流量威胁监测系统的方案选择
  20. python的各种推导式

热门文章

  1. ESP8266连得上WIFI却连不上手机热点
  2. 使用Linux修复Windows PC的10种最聪明的方法
  3. 数学中 arg min是什么意思
  4. 听说掌握这些利器,运维就能运筹帷幄
  5. 设计模式-中介者模式
  6. 征信前置查询接口调用联调测试
  7. LZY逃命路线总数(记忆化递归)非常难
  8. dnc开源梦之队2018 开源项目精选集
  9. python---字符串详解
  10. 解决.Net Framework 在计算机上已安装了更高的 4.x 版本