kernel: fmsedge[18328]: segfault at 0000000000000000 rip 0000003a31e7f808 rsp 00007fffb772b1

最近有一台业务机频繁down机,重启后查看系统日志,发现如下内容

Nov 25 15:43:09 dgtests Server[18328]: Shared memory heap (__FCS__serverstats_) has exceeded 90 usage. Consider increasing the heap size to prevent future memory allocation failures.
Nov 25 15:43:09 dgtests last message repeated 2 times
Nov 25 15:43:09 dgtests kernel:fmsedge[18328]: segfault at 0000000000000000 rip 0000003a31e7f808 rsp 00007fffb772b1e8 error 6

从字面意义上分析,这个是由于内存访问越界造成的,不管是用户态程序还是内核态程序访问越界都会在log日志message文件中记录,

Nov 25 15:43:09 dgtests kernel:fmsedge[18328]: segfault at 0000000000000000 rip 0000003a31e7f808 rsp 00007fffb772b1e8 error 6 

这里kernel前面的dgtest为主机名,后面的fmsedge为程序名,segfault at 0000000000000000 rip 0000003a31e7f808 rsp 00007fffb772b1e8 为访问越界的地址以及当时进程堆栈地址等信息,最后的是error number,这里的error number 为 6 ,计算机中二进制表达为 110 , 即 bit2=1, bit1=1, bit0=0, 按照上面的解释,我们可以得出这条信息是由于用户态程序写操作访问越界造成的,结论的得出基于下面的理论:

bit2: 值为1表示是用户态程序内存访问越界,值为0表示是内核态程序内存访问越界
bit1: 值为1表示是写操作导致内存访问越界,值为0表示是读操作导致内存访问越界
bit0: 值为1表示没有足够的权限访问非法地址的内容,值为0表示访问的非法地址根本没有对应的页面,也就是无效地址


结合 110 进行分析,我们的错误为 用户态程序写操作访问越界造成 ,这里标记一下,以作为以后分析使用。


你可能感兴趣的:(kernel,fmsedge)