Linux内核:进程管理——故障排除

在处理Linux系统出现的各种故障时,故障的症状是最先发现的,而导致这以故障的原因才是最终排除故障的关键。熟悉Linux系统的日志管理,了解常见故障的分析与解决办法,将有助于管理员快速定位故障点。“对症下药”及时解决各种系统问题。

(一)日志分析及管理

◆ 日志文件是用于记录Linux系统中各种运行消息的文件,对于诊断和解决系统中的问题很有帮助。在Linux系统中,日志文件包括三种类型:

1.内核及系统日志:这种日志数据由系统服务syslog统一管理,根据其主配置文件"/etc/syslog.conf"中的设置决定将内核消息及各种系统程序消息记录到什么位置。系统中有相当一部分程序会把自己的日志文件交由syslog管理,因而这些程序使用的日志记录也具有相似的格式。

2.用户日志:这种日志数据用于记录Linux系统用户登录及退出系统的相关信息,包括用户名、登录的终端、登录时间、来源主机、正在使用的进程操作等。

3.程序日志:有些应用程序运会选择自己来独立管理一份日志文件(而不是交给syslog服务管理),用于记录本程序运行过程中的各种事件信息。由于这些程序只负责管理自己的日志文件,因此不同的程序所使用的日志记录格式可能会存在极大差异。

查看/var/log中的日志文件及目录

[root@localhost ~]# ls /var/log/anaconda.ifcfg.log    anaconda.xlog     btmp-20170403  cups        maillog           messages-20170327  sa               spooler           wtmpanaconda.log          anaconda.yum.log  ConsoleKit     dmesg       maillog-20170327  messages-20170403  samba            spooler-20170327  yum.loganaconda.program.log  audit             cron           dmesg.old   maillog-20170403  ntpstats           secure           spooler-20170403anaconda.storage.log  boot.log          cron-20170327  dracut.log  mcelog            prelink            secure-20170327  sssdanaconda.syslog       btmp              cron-20170403  lastlog     messages          running.today      secure-20170403  tallylog

◆日志文件分析

1.内核及系统日志:

主要由默认安装的syslogd-1.4.1-39.2软件包提供,该软件包安装了klogd、syslogd两个程序,并通过syslog服务进行控制,分别用于记录系统内核的消息和各种应用程序的消息。syslog服务所使用的配置文件为"/etc/syslog.conf"。通常情况下,内核及大多数系统消息都被记录到公共日志文件"/var/log/messages"中,而其他一些程序消息被记录到不同的文件中,日志消息还能够记录到特定的存储设备中,或者直接向用户发送。

在Linux内核中,根据日志消息的重要程度不同,将其分为不同的优先级别(数字等级越小,优先级越高,消息越重要)。

0 EMERG(紧急):会导致主机系统不可用的情况。

1 ALERT(警告):必须马上采取措施解决的问题。

2 CRIT(严重):比较严重的情况。

3 ERR(错误):运行出现错误。

4 WARNING(提醒):可能影响系统功能,需要提醒用户的重要事件。

5 NOTICE(注意):不会影响正常功能,但是需要注意的事件。

6 INFO (信息):一般信息。

7 BEBUG(调试):程序或系统调试信息等。

查看/var/log/messages最后两行

[root@localhost ~]# tail /var/log/messagesApr  3 17:40:01 localhost rsyslogd: [origin software="rsyslogd" swVersion="5.8.10" x-pid="1458" x-info="http://www.rsyslog.com"] rsyslogd was HUPed

2.用户日志:

在wtmp、utmp、lastlog等日志文件中,保存了系统用户登录,退出等相关事件的事件消息。但是这些文件都是二进制的数据文件,不能直接使用tail、less等文本查看工具进程浏览,需要使用who、w、users、last和ac等用户查询命令来获取日志信息。

who、w命令用于查询utmp文件,显示当前登陆的每个用户的详细信息

last、ac命令用于查询wtmp文件,显示每个用户登录、注销及系统启动和停机事件

ac -d 某用户按天数统计

ac -p 统计各用户的总连接时间

[root@localhost ~]# ac -d rootMar 22  total        5.31Mar 23  total       16.23Mar 24  total       20.03Mar 25  total       52.38Mar 27  total        9.80Mar 28  total        2.76Mar 29  total        7.46Mar 30  total       30.43Mar 31  total        7.23Apr  1  total       45.53Apr  3  total        7.10Today   total        1.62
[root@localhost ~]# ac -p        root                               205.87        total      205.87

3.程序日志:

在Linux系统中,还有相当一部分应用程序并没有使用syslog服务来管理日志。而是由程序自己维护日志记录。

鉴于日志数据资料的重要性,对于系统运行过程中产生的各种日志文件,必须采用有针对性的管理策略,以确保日志数据的准确性、安全性和真实性。一般来说,可以从以下几个方面进行考虑。

1.日志备份和归档:日志文件也是重要的数据资料,同样需要进行备份和归档。

2.延长日志保存期限:在存储空间富裕的情况下,日志数据保留的时间应尽可能长。

3.控制日志访问权限:日志数据中可能会包含各类敏感信息,如:账号、口令等。所以需要严格控制其访问权限。

4.集中管理日志:使用集中的日志服务器管理各服务器发送的日志记录等。其好处在于方便对日志的收集、整理和分析,杜绝意外的丢失、恶意篡改或删除等。

(二)系统启动类故障排除

◆MBR扇区故障

MBR引导记录位于物理硬盘的第一个扇区(512个字节),包含系统引导程序的部分数据和整个硬盘的分区表记录。当主引导扇区发送故障时,将可能无法进入主引导菜单,或者因无法找到正确的分区位置而无法加载系统,通过该硬盘引导主机时很可能进入黑屏状态。

1.备份MBR扇区数据

使用dd命令备份

2.模拟MBR扇区故障

使用dd命令,将MBR扇区的记录覆盖

3.从备份文件中恢复MBR扇区数据

以使用RHEL5安装光盘引导为例,当出现安装向导的:“boot”提示符时,在后边输入“linux rescue‘并回车,将以”急救模式“引导光盘中的Linux系统。之后一次按回车键接受默认的语言、键盘合适,提示是否配置网卡时一般选择”No’,然后系统会自动查看硬盘中的Linux分区并尝试将其挂载到"/mnt/sysp_w_picpath"目录(选择“Continue”确认并继续)。接下需要特别输液椅:当出现是否初始化磁盘的警告窗口时如:

一定要选择"No",以免对硬盘数据造成进一步损坏。

最好选择“OK”确认后进入到带"sh-3.1#"提示符的Bash Shell环境,只要执行相应的命令挂载保存有备份文件的硬盘文件(sdb1),并将数据恢复到硬盘"/dev/sda"中即可。需要注意的是,当前使用的系统环境是光盘中的Linux目录结构。

◆GRUB引导故障

同样使用RHEL5的安装光盘进入急救模式,如果分区表并未被破坏,则急救模式将会找到硬盘中的Linux根分区,并将其挂载到光盘目录结构中的"/mnt/sysp_w_picpath/"文件夹中。

进入"sh-3.1"的Shell环境以后,执行"chroot /mnt/sysp_w_picpath"命令可以将目录结构切换到待修复的Linux系统中。然后重新建立新的grub.conf配置文件即可。

正常主机中的grub.conf文件

[root@localhost ~]# cat /boot/grub/grub.conf...default=0timeout=5splashp_w_picpath=(hd0,0)/grub/splash.xpm.gzhiddenmenutitle CentOS 6 (2.6.32-573.el6.x86_64)        root (hd0,0)        kernel /vmlinuz-2.6.32-573.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS rd_NO_MD rd_LVM_LV=VolGroup/lv_swap crashkernel=auto LANG=zh_CN.UTF-8 rd_LVM_LV=VolGroup/lv_root  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet        initrd /initramfs-2.6.32-573.el6.x86_64.img

如果是MBR扇区中的引导程序出现损坏,可能在重建grub.conf配置文件后仍然无法成功启动系统,这时候可以在救援模式的Shell环境重新安装grub

  1. chroot /mnt/sysp_w_picpath
  2. grub-install /dev/sda

◆/etc/inittab文件丢失

在急救模式的"sh-3.1#"环境中挂载RHEL5光盘设备,并重新安装initscript软件包,结合rpm 命令的"--replacepkgs"选项用于替代现有文件。

◆/etc/fstab文件丢失

在急救模式的Shell环境中扫描逻辑卷组,激活逻辑卷,以便找到根分区设备,然后手动挂载根分区,并重建fstab配置文件。

lvm vgscan 查找逻辑卷

lvm vgchange -ay /dev/VolGroup00 激活找到的逻辑卷

mkdir /tmpdir

mount /dev/VolGroup00/LogVol00 /tmpdir 挂载根分区到/tmpdir目录

vi /tmpdir/etc/fstab 重建fstab配置文件,或直接复制备份的文件

◆遗忘root用户的密码

1.通过单用户模式重设root账号的密码

2.通过急救模式重设root账号的密码

只需切换到待修复Linux系统的根目录环境,直接执行"passwd root"命令重设root用户的密码即可

(三)软件包类故障

◆rpm数据库损坏 rpm --rebuilddb 重建数据库

◆缺少*.so文件

当安装新程序时,如果提示缺少*.so文件,应首先使用find命令查找系统中是否存在对应文件,若不存在则表示提供该链接库的依赖软件并没有安装,需先获取相应的软件包并安装才行。若系统中已经存在对应的*.so文件,则通过修改ld.so.conf文件,添加新的库文件搜索路径,执行ldconfig命令,解决库文件搜索的问题

(四)文件系统、磁盘类故障

◆修复文件系统 fsck -yt

-t 指定文件系统类型,

-y 对发现的问题自动回答"yes"。

比较常见的是超级块(super-block)损坏。超级块是文件系统的核心"档案",他记录了该文件系统的类型、大小、空闲磁盘块等信息。

需要注意的是:如果该文件系统遭受破坏的情况很严重,则修复完毕后可能仍然会丢失一些数据,因此请慎重决定是否进行恢复(必要时也可以先用dd命令将损坏的分区进行备份)。

◆磁盘资源耗尽

1.模拟i节点耗尽故障

编写一个循环创建空文件的脚本程序,运行脚本直至耗尽i节点

2.修复i节点耗尽故障

找出占用大量i节点的细小文件,进行转移或删除

◆无法卸载已挂载的设备

用户或其他程序正在使用该设备的资源

fuser 找出正在使用某个设备或文件的用户

-m 指定相应的文件或目录

-v 显示详细信息

-k 终止该进程

[root@localhost ~]# fuser -mv /media/cdrom/                     用户     进程号 权限   命令/media/cdrom/:       root          1 .rce. init                     root          2 .rc.. kthreadd                     root          3 .rc.. migration/0                     root          4 .rc.. ksoftirqd/0                     root          5 .rc.. stopper/0...

◆检测磁盘坏道 badblocks

-s 用于显示进度信息

-v 用于显示详情

[root@localhost ~]# badblocks -sv /dev/sdb1 正在检查从 0 到 2104482的块 Checking for bad blocks (read-only test): 完成                                 Pass completed, 0 bad blocks found.

(五)查看系统性能状况

  1. 查看CPU负载
    uptime命令
    查看/proc/loadavg文件
[root@localhost ~]# uptime 17:56:12 up 52 min,  1 user,  load average: 0.00, 0.00, 0.00[root@localhost ~]# cat /proc/loadavg 0.00 0.00 0.00 1/101 2117

2.查看内存使用情况

vmstat 报告虚拟存储使用情况

free -m 显示物理内存和交换空间的使用情况

[root@localhost ~]# vmstat procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st 0  0      0 543912  29088  56084    0    0    26     3   19   16  0  0 99  0  0
[root@localhost ~]# free -m             total       used       free     shared    buffers     cachedMem:           727        196        531          0         28         54-/+ buffers/cache:        112        614 Swap:         1471          0       1471

3.磁盘IO性能监控

使用iostat命令查看系统中磁盘的IO性能统计信息,该命令工具由sysstat软件包提供

-d 只输出磁盘数据

-t 输出时间,可以指定刷新信息的时间间隔

[root@localhost ~]# iostat Linux 2.6.32-573.el6.x86_64 (localhost.localdomain)     2017年04月04日  _x86_64_        (1 CPU)avg-cpu:  %user   %nice %system %iowait  %steal   %idle           0.06    0.00    0.32    0.27    0.00   99.35Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtnscd0              0.01         0.08         0.00        352          0sda               1.09        40.75         4.99     171400      20994sdb               0.12         0.71         0.00       2978          0dm-0              2.44        38.44         4.97     161674      20920dm-1              0.08         0.63         0.00       2648          0dm-2              0.02         0.19         0.00        808          0

mpstat命令 用于统计进程负载

[root@localhost ~]# mpstat Linux 2.6.32-573.el6.x86_64 (localhost.localdomain)     2017年04月04日  _x86_64_        (1 CPU)18时52分12秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle18时52分12秒  all    0.04    0.00    0.20    0.23    0.00    0.07    0.00    0.00   99.46

内核资料直通车:Linux内核源码技术学习路线+视频教程代码资料

学习直通车:Linux内核源码/内存调优/文件系统/进程管理/设备驱动/网络协议栈

原文作者:精通Linux内核

原文地址:Linux内核:进程管理——故障排除 - 知乎(版权归原文作者所有,侵权留言联系删除)

猜你喜欢

转载自blog.csdn.net/m0_74282605/article/details/130174351