Linux基础排查

这里综合了一些云上ECS Linux系统常见问题涉及知识和排查工具,方便大家自行排查时候作一些参考。


一、磁盘/分区操作

分区操作

  • fdisk

  • parted

文件系统操作

  • mount/umount - 挂载/卸载文件系统

  • mkfs - 创建文件系统

  • fsck - 文件系统检查和修复

  • tune2fs - 调整/查看文件系统

  • resize2fs - resize文件系统

  • debugfs

文件

  • /proc/mounts

  • /proc/partitions

  • /etc/mtab

  • /etc/fstab

 [root@iXXXXXXX ~]# cat /etc/fstab
 #
 # /etc/fstab
 # Created by anaconda on Thu Feb 23 07:28:22 2017
 #
 # Accessible filesystems, by reference, are maintained under '/dev/disk'
 # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
 #
 UUID=3d083579-f5d9-4df5-9347-8d27925805d4 / ext4 defaults 1 1
 tmpfs /dev/shm tmpfs defaults 0 0
 devpts /dev/pts devpts gid=5,mode=620 0 0
 sysfs /sys sysfs defaults 0 0
 proc /proc proc defaults 0 0
 /dev/vdb1 /mnt ext3 defaults 0 0

常见问题

1、开机进入紧急模式(Emergency Mode)

现象:

无法远程,VNC连接显示以下信息:
Linux基础排查
绝大多数情况为/etc/fstab挂载信息有问题,少数情况为启动项异常、磁盘自检异常等。
Linux基础排查

解法:

1、Emergency Mode下登录系统后进行日志检查。
  • /var/logs
  • journalctl -xb
2、进入单用户模式(single-user-mode)进行修改

2、文件系统异常

现象:

  • 启动异常,提示文件系统有问题
  • 进入系统发现磁盘是只读状态
  • 一些命令执行或者程序运行异常,报错可能提示文件系统错误

解法:

1、通过以下命令检查文件系统状态
     tune2fs -l <分区文件系统>


异常示例:

Linux基础排查
2、修复文件系统

    数据盘:请umount后直接执行

fsck <文件系统分区> -y

    系统盘:确保做好快照后工单联系售后处理。

3、tune2fs确认磁盘clean后重启服务器

3、磁盘分区/扩容失败

基本思路:打好快照,基于报错通过搜索引擎检索,通过fdisk/parted/resize2fs等尝试重新分区和扩容。
2TB以上分区:


二、系统性能资源

CPU

查询cpu信息

cat /proc/cpuinfo

进程状态

D Uninterruptible sleep (usually IO)
R Running or runnable (on run queue)
S Interruptible sleep (waiting for an event to complete)
T Stopped, either by a job control signal or because it is being traced.
Z Defunct ("zombie") process, terminated but not reaped by its parent

查询进程状态和资源消耗

ps auxf
USER PID %CPU %MEM VSZ RSS TTY STAT START  TIME COMMAND
ps -eLf
UID PID PPID LWP C NLWP STIME TTY  TIME CMD
top
pidstat
vmstat

查询线程CPU资源

ps -eT -o%cpu,pid,tid,ppid,comm | sort -n -r | head -20

查看进程运行在哪个CPU核上

ps -eo pid,psr

关于Load

cat /proc/loadavg
Memory

基础命令

top

free -h

cat /proc/meminfo

atop


Linux基础排查
实际也可以对比云监控预设监控项:
Linux基础排查

内存占用前20的进程

ps -e -o%mem,pid,tid,ppid,comm | sort -n -r | head -20

slab缓存

slab是啥?

通过啥命令来查看?
cat /proc/slabinfo
slabtop   #display kernel slab cache information in real time
啥命令来释放缓存?
echo "3">/proc/sys/vm/drop_caches
需要注意的是,系统启动后其初始值是0,之后可以赋值1、2、3,赋值只是触发动作,本身值没有什么意义。
Writing to this will cause the kernel to drop clean caches, dentries and inodes from memory, causing that memory to become free.
To free pagecache:
  • echo 1 > /proc/sys/vm/drop_caches
    To free dentries and inodes:
  • echo 2 > /proc/sys/vm/drop_caches
    To free pagecache, dentries and inodes:
  • echo 3 > /proc/sys/vm/drop_caches
    As this is a non-destructive operation, and dirty objects are notfreeable, the user should run "sync" first in order to make sure allcached objects are freed.
This tunable was added in 2.6.16.

Out Of Memory (OOM)

Linux基础排查

Linux的OOM Killer机制的存在跟它的overcommit特性有关。
所谓overcommit就是操作系统分配给进程的总内存大小超过了实际可用的内存,这样做的原因是进程实际上使用的内存往往比申请的内存要少。比如有个进程申请了1G的内存,但实际上它只在一小段时间里加载了大量数据,需要使用较大的内存,而在运行过程的其他大部分时间里只用了100M的内存。这样其实有900多M的内存在大部分时间里是闲置的,完全可以分给其他进程,overcommit的机制就能充分利用这些闲置的内存。
这种分配方式寄希望于进程用不了那么多内存,但是当进程实际使用较多内存导致内存不足时候,内核会触发OOM Killer机制来找出一个合适的进程kill掉来释放内存满足需求。
Linux内存overcommit配置有三种模式,也即内核参数vm.overcommit_memory接受三种取值
0 – Heuristic overcommit handling. 这是缺省值,它允许overcommit,但过于明目张胆的overcommit会被拒绝,比如malloc一次性申请的内存大小就超过了系统总内存。Heuristic的意思是“试探式的”,内核利用某种算法猜测你的内存申请是否合理,它认为不合理就会拒绝overcommit。
1 – Always overcommit. 允许overcommit,对内存申请来者不拒。
2 – Don't overcommit. 禁止overcommit。
如何配置使得进程不会被OOM Kill?
echo -17 > /proc/<PID>/oom_adj
[root@iZbp1cvnme86y07zhd1mfiZ /]# cat /usr/include/linux/oom.h
#ifndef __INCLUDE_LINUX_OOM_H
#define __INCLUDE_LINUX_OOM_H
/*
/proc//oom_score_adj set to OOM_SCORE_ADJ_MIN disables oom killing for
pid.
*/
#define OOM_SCORE_ADJ_MIN       (-1000)
#define OOM_SCORE_ADJ_MAX       1000
/*
/proc//oom_adj set to -17 protects from the oom killer for legacy
purposes.
*/
#define OOM_DISABLE (-17)
/ inclusive /
#define OOM_ADJUST_MIN (-16)
#define OOM_ADJUST_MAX 15
#endif / __INCLUDE_LINUX_OOM_H /
手动触发OOM
echo f> /proc/sysrq-trigger
Disk

工具

iostat

dstat

sar - [-b #Display io statistics]

df - 检查文件系统使用磁盘空间

du - 检查文件使用磁盘空间

fio - 磁盘性能压测

一般对磁盘性能有疑问,建议用fio压测磁盘,压测时候避免有其他业务运行影响结果。

命令参考:

https://help.aliyun.com/document_detail/25382.html

df和du命令查看到的使用空间不一致?
网络

常用工具:

网络监测:

ping - ICMP包测试,[-s  #Size in byte] [-i #Interval in second]

telnet - 测试端口连通性

nmap - 网络探测&扫描工具,基础使用[nmap <ip> <ip> <ip>] [nmap <ip/mask>] [-Pn #Ports scan without ping host check]

traceroute - 路由跟踪,[-I #using ICMP] [-T #using TCP SYN],默认用UDP

mtr - 网络诊断,[-c #Probes per second] [-s #ICMP packet size] [-T #Using TCP SYN] [-P #Specify port number] -u #Using UDP]

网络分析:

ss - 查询socket统计信息,[-s #Summary statistics] [-ant #]

iftop - 基于host显示网卡带宽使用情况,[-P #Diplay ports]  [-N #Display ports in number instead of service name]
iperf - 压测
dstat

sar - 系统资源使用统计,[-n #Specify network]  [DEV #Network usage for all interfaces]  [EDEV #Network failure/errors count]

sar -n DEV

输出项说明:

IFACE 网络设备名

rxpck/s 每秒接收的包总数

txpck/s 每秒传输的包总数

rxbyt/s 每秒接收的字节(byte)总数

txbyt/s 每秒传输的字节(byte)总数

rxcmp/s 每秒接收压缩包的总数

txcmp/s 每秒传输压缩包的总数

rxmcst/s 每秒接收的多播(multicast)包的总数

netstat - 查询连接情况

netstat -s     #连接信息统计汇总
netstat -i     #接口网络统计
netstat -nltp  #进程TCP监听信息
netstat -nlup  #进程UDP监听信息
netstat -ano   #列出监听和连接信息

tcpdump - 抓包

tcpdump -i <interface # any|eth0|eth1...> host <ip> port <port number>
tcpdump -i any port 53 #抓DNS请求
tcpdump -i any host 1.1.1.1 port 80 #抓包含ip 1.1.1.1和port 80的包
nohup tcpdump -i any -C 30 -W 50 -w /tmp/net.pcap & #后台循环抓包50M*30

测试下载

wget - 下载工具,[-O #Download to specified filename] [-P #To specified path]
        *注:有特殊字符的url记得加上双引号
curl - 基于url传输数据,[-I #Header info only] [-o #Output to file] [-v #Verbose] [-s #Silent mode]

网络解析

dig
nslookup

防火墙

iptables
firewalld

网络配置

ip
ifconfig
route

配置文件

/etc/sysconfig/network-scripts
/etc/network/interfaces
/etc/resolv.conf

三、基础服务

SSH

默认22端口

/etc/ssh/

/etc/ssh/ssh_config #ssh客户端配置文件

/etc/ssh/sshd_config #ssh服务端配置文件

详细解读和问题汇总

https://help.aliyun.com/knowledge_detail/52874.html

verbose & debug

客户端启用verbose日志: ssh -vvv

服务端开启debug模式:/usr/sbin/sshd -p <testport> -d

定时任务

系统MAC时间

cron&anacron

Linux基础排查
*/etc/crontab目前版本系统基本都是空的,通过crontab命令的操作具体反映在/var/spool/cron中。
*/bin/run-parts用于执行整个目录的可执行程序。
*基于日、周、月的cron任务是通过anacron来跑的,crond执行/etc/cron.hourly/0anacron会去检查当天/周/月对应anacron是不是跑过,没跑过才会调用/usr/sbin/anacron。
*系统日志默认是每周滚动,但是对应文件是在/etc/cron.daily下

简单概括功能的话,cron基于时间进行定时任务调度,而anacron不依赖于系统持续运行,方便实现异步的周期性任务。
crontab -l #列出当前用户定时任务

crontab -e #配置当前用户定时任务

crontab -r #删除当前用户定时任务
日志查询:
/var/log/cron*

logrotate

Linux系统提供了logrotate这个工具来方便地实现日志滚动,默认通过cron每日执行

cron和logrotate详细介绍:https://www.atatech.org/articles/90434

系统时间

date

显示或者修改系统时间

hwclock/clock

查询或者修改硬件时间(RTC)
写入系统时间到硬件时间:hwclock -w (--systohc)
写入硬件时间到系统时间:hwclock -s (--hctosys)

ntpd

基于ntp server校准系统时间和时钟频率。一般服务器先ntpdate同步时间后,再启用ntpd进行逐渐校正。

/etc/ntp.conf #ntp配置文件
/usr/share/zoneinfo/ #时区配置文件
/etc/localtime #当前时区配置文件

/etc/timezone #当前时区描述

ntpdate

基于ntp server同步系统时间

timedatectl

设置系统日期和时间

上一篇:云效(原RDC)如何构建一个基于Composer的PHP项目


下一篇:云效公有云如何构建一个基于Composer的PHP项目