BUG:使用/var/log/messages定位问题
1、/var/log/目录下文件和目录简介
/var/log/messages # 包括整体系统信息,也包含系统启动期间的日志。此外,mail,cron,daemon,kern和auth等内容也记录在此日志中;
/var/log/dmesg #包含内核缓冲信息(kernel ring buffer)。在系统启动时,会在屏幕上显示许多与硬件有关的信息。可以用dmesg查看它们;
/var/log/auth.log # 包含系统授权信息,包括用户登录和使用的权限机制等;
/var/log/boot.log # 包含系统启动时的日志;
/var/log/daemon.log # 包含各种系统后台守护进程日志信息;
/var/log/dpkg.log # 包括安装或dpkg命令清除软件包的日志;
/var/log/kern.log # 包含内核产生的日志,有助于在定制内核时解决问题;
/var/log/lastlog # 记录所有用户的最近信息。这不是一个ASCII文件,因此需要用lastlog命令查看内容;
/var/log/maillog /var/log/mail.log # 包含来着系统运行电子邮件服务器的日志信息。例如,sendmail日志信息就全部送到这个文件中;
/var/log/user.log # 记录所有等级用户信息的日志;
/var/log/Xorg.x.log # 来自X的日志信息;
/var/log/alternatives.log # 更新替代信息都记录在这个文件中;
/var/log/btmp # 记录所有失败登录信息。使用last命令可以查看btmp文件。例如,”last -f /var/log/btmp | more“
/var/log/cups # 涉及所有打印信息的日志;
/var/log/anaconda.log # 在安装Linux时,所有安装信息都储存在这个文件中;
/var/log/yum.log # 包含使用yum安装的软件包信息;
/var/log/cron # 每当cron进程开始一个工作时,就会将相关信息记录在这个文件中;
/var/log/secure # 包含验证和授权方面信息。例如,sshd会将所有信息记录(其中包括失败登录)在这里;
/var/log/wtmp 或 /var/log/utmp # 包含登录信息。使用wtmp可以找出谁正在登陆进入系统,谁使用命令显示这个文件或信息等;
/var/log/faillog # 包含用户登录失败信息。此外,错误登录命令也会记录在本文件中;
有很多文件和目录因不同机器而不同,望知晓。
2、遇到的问题,linux软件异常退出,日志中没有显示出异常问题
找到/var/log/messages文件,找到意外退出的大概时间点
messages中详细的显示了dump的ip和sp位置和应用退出的原因:收到了SIGSEGV信号而导致的退出
下面我们只需要定位libc.so.6这个包的问题
3、定位libc.so.6异常问题
segfault at 13 ip 00007f8f04b25ff4 sp 00007f8e2afc3920 error 4 in libc.so.6[7f8f04aa4000+1c4000]
其中7f8f04aa4000为libc.so.6库加载在内存中的初始位置,ip表示指令寄存器,sp表示栈寄存器
我们使用ip的地址 - 初始地址 = 0x00007f8f04b25ff4 - 0x7f8f04aa4000 = 0x81ff4获取到相对位置
[root@localhost home]# objdump -tT libc.so.6 | grep 081f
0000000000081f80 l F .text 0000000000000f2c _int_malloc
这里grep使用的是81f,找到对应的函数为_int_malloc函数导致的问题,但是还是不清楚到底是代码的哪里调用了这个函数,我们需要开启dump来再次捕获问题。
4、问题解决
没有用到dump而是由于我们机器的内核升级导致的libc.so.6指向的是旧版本的内核,新版本为libc-2.17.so,重新软连接就解决了。当然具体问题具体分析啊。
参考blog:
https://blog.youkuaiyun.com/xp178171640/article/details/124598568
https://blog.youkuaiyun.com/xiejianjun417/article/details/115624163