Linux系统故障排查思路与常见案例html

一、Linux系统日志与分类

内核及系统日志

这种日志数据由系统服务syslog统一管理,根据其主配置文件“/etc/syslog.conf”中的设置决定将内核消息及各类

系统程序消息记录到什么位置。java

用户日志:

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

程序日志:

有些应用程序运行会选择本身来独立管理一份日志文件(而不是交给syslog服务管理),用于记录本程序运行过程当中的各类事件信息。shell

二、Linux下日志文件解读:

Linux系统自己和大部分服务器程序的日志文件默认状况下都放置在目录 /var/log 中。

/var/log/messages : 公共日志文件,记录Linux内核消息及各类应用程序的公共日志信息,包括启动、IO错误、网络错误、程序故障等。

对于未使用独立日志文件的应用程序或服务,通常均可以从该文件得到相关的事件记录信息。centos

/var/log/cron : 记录crond计划任务产生的事件消息。服务器

/var/log/dmesg: 包含内核缓冲信息(kernel ring buffer)。在系统启动时,会在屏幕上显示许多与硬件有关的信息。此文件记录的信息是上次启动时的信息。

而用dmesg命令可查看本次系统启动时与硬件有关的信息,以及内核缓冲信息。网络

/var/log/maillog : 记录进入或发出系统的电子邮件活动。oracle

/var/log/boot.log : 记录系统启动时的软件日志信息。ide

/var/log/secure : 记录用户远程登陆、认证过程当中的事件信息。编码

/var/log/wtmp : 记录系统全部登陆进入和退出纪录。可执行last命令查看。

/var/log/btmp : 记录错误登陆进入系统的日志信息,可执行lastb命令查看。

/var/log/lastlog: 记录最近成功登陆的事件和最后一次不成功的登陆事件。可执行lastlog命令查看。

export LANG=en_US (把shell终端变为英文。)

#lastlog (查看最近登陆信息)

#locale (查看系统编码格式)

2、忘记linux root密码故障与解决案例

一、单用户模式

这个问题出现的概率是很高的,不过,在linux下解决这个问题也很简单,只需重启linux系统,而后引导进入linux的单用户模式(init 1),

因为单用户模式是不须要输入登陆密码的,所以,能够直接登陆系统,修改root密码便可解决问题。

进入单用户模式centos6.x和centos7.x不一样。

centos6.x进入单用户模式:

在启动刚开机时有欢迎界面,立刻按上、下、左、右键。进入GRUB界面,再按键盘上“e”键。进入新的界面。选择 “kernel ...”这行(内核),按键盘上“E”键。

进入新的界面,此时能够输入字符。输入“single”按回车。再次进入“kernel ...”界面,继续选择此行,按“b”键。开始自动引导,自动进入单用户模式。

此时能够修改密码: #passwd root(表示修改root用户密码)。 按提示输入密码,完成,reboot。完成密码修改。

#cd /etc/grub.cfg(centos6.9开机文件的设置)

centos7.x进入单用户模式修改密码:

在启动时的引导界面,选择“CentOS Linux....”内核,按键盘“E”键,进入到新的界面,把光标移动到“Linux16 /... root=UUID=...”这行,在这行加入内容,把光标放到这行最后,

...UTF-8这里,输入 “init=/bin/sh”加完后让继续引导,按Crt和x。进入到shell终端,开始重置密码。先把根分区变为可写,输入: # mount -o remount,rw /(把根分区从新挂载,让可读可写)。

更改密码 # passwd root(修改root用户密码),修改完成。进入#cd /etc/selinux/ 查看 #more config 。在根目录下常见一个文件: # touch /.autorelabel 或把 /etc/selinux下的config文件

里的 SELINUXTYPE的值改成 disabled。此时完成密码修改,重启系统。 使用 # exec /sbin/init (centos7单用户模式下用此命令重启。)

#cd /etc/grub2.cfg(centos7开机文件的设置)

3、系统没法启动故障案例

一、root文件系统破坏,致使系统没法启动故障案例。

这种状况多因为异常断电、不正常关机,引发文件系统结构不一致的。此种问题发生,在系统启动的时候,屏幕会显示:

checking root filesystem
/dev/sdb5 contains a file system with errors , check forced
/dev/sdb5: UNEXPECTED INCONSISTENCY;RUN fsck MANUALLY
....
press enter for maintenance
(or type Control-D to continue):
give root password for maintenance

从这个错误能够看出,系统根分区文件系统出现了问题,系统在启动时没法自动修复,而后进入到了一个交互界面,提示用户进行系统修复。

解决方法: 输入root密码后进入系统修复模式,在修复模式下,能够执行 fsck命令,如:

#fsck .ext4 -y /dev/sdb5 (文件系统是ext4,就用.ext4格式修复)

加入boot分区出现问题,先卸载该分区。# umount /boot

修复 #fsck /dev/sda1(/dev/sda1为boot分区对应的路径)

二、/etc/fstab文件丢失,致使系统没法启动案例

/etc/fstab文件存放了系统中文件系统的相关信息,在linux启动时,系统会读取此文件,自动挂载linux的各个分区,若是此文件配置错误,

或者丢失,就会致使系统没法启动,具体的故障现象是在检测mount partition时出现: starting system logger .此后系统启动就中止了。

解决方法:

利用Linux rescue 修复模式登陆系统,进而获取分区和挂载点信息,重构/etc/fstab文件。

Linux系统没法启动的通用解决方案。

1,进入单用户模式或援救模式(rescue),修复分区错误或者备份数据,而后修复或从新安装系统。

进入援救(rescue)模式方式:经过iso磁盘或者U盘,选择到其启动,选择troubleshooting 。进入新的界面,选择 Rescue a CentOS system进入,

等进入新的界面,根据状况选择,continue ,第一个为continue,输入1.到新的界面,能够输入命令。#df -h。进入 #cd /mnt/sysimage/ 再进入#cd /etc .

#vi /etc/fstab。

若是fstab文件丢失,则系统不能正常启动。

4、“Read-only file system”错误与解决案例

如现象: java.lang.RuntimeException:Cannot make directory:file:/www/data/html/2021-01-24

思路:多是服务器磁盘故障(磁盘空间满了或者磁盘没法写入了)

缘由:磁盘分区出现了问题,致使文件系统结构不一致,文件系统关闭了写功能,须要修复文件系统结构:

#umont /www/data (先卸载出现问题的分区)
#fsck -y /dev/sda7(修复出问题的分区对应的硬件分区地址)
#mount /dev/sda7 /data1(修复完成后,从新挂载该分区)

5、su命令切换用户带来的问题

故障现象: su:warning:cannot change directory to /home/oracle: Permission denied

解决思路:

用户目录/home/oracle权限问题

su程序执行权限问题

程序依赖的共享库权限问题

selinux问题致使

系统跟空间问题

产生缘由: 根目录权限问题致使,修改根目录权限便可。 #chmod 555 /

#ldd /bin/ls (查看ls命令依赖的库文件),ldd命令用来查看系统命令依赖的库文件。
#more /etc/selinux/config (查看selinux配置文件。)

#stat / (查看目录或文件的权限信息)

6、“Too many open files”错误与解决方法:

如现象: java.io.IOException: Too many openfiles

思路:这个案例涉及到linux下ulimit命令的使用,ulimit主要是用来限制进程对资源的使用状况的,它支持各类类型的限制。

ulimit -a

-a :显示当前系统全部的limit资源信息。

-H :设置硬资源限制,一旦设置不能增长。

-S :设置软资源限制,设置后能够增长,可是不能超过硬资源设置。

-c : 最大的core文件的大小,以blocks为单位。

-f : 进程能够建立文件的最大值,以blocks为单位。

-d : 进程最大的数据段的大小,以kbytes为单位。

-m : 最大内存大小,以kbytes为单位。

-n : 能够打开的最大文件描述符的数量。

-s : 线程栈大小,以Kbytes为单位。

-P : 管道缓冲区的大小,以kbytes为单位。

-U : 用户最大可用的进程数。

-v : 进程最大可用的虚拟内存,以kbytes为单位。

-t : 最大CPU占用时间,以秒为单位。

-l :最大可加锁内存大小,以kbytes为单位。

#ulimit -n 655360 (修改可打开最大文件描述的数量为655360)此处修改成临时生效的。

须要永久保存需进入/etc/security/limits.conf 文件中配置,此处设置系统级的资源配置。

vi /etc/security/limits.conf

处理/etc/security/limits.conf文件还有一个/etc/security/limits.d/20-nproc.conf文件,此文件在centos7中。

先后两个文件之后面的文件设置为准。