服务器问题 排查思路
一.尽可能搞清楚问题的前因后果
1.故障是什么时候发现的?
2.故障的表现是什么?无响应?报错?
3.最后一次对整个平台进行更新的内容是什么(代码、服务器等)
二.当前有谁在,做过什么操作
1. w/who
2. last
3. history
三.现在运行的进程有什么
1. pstree -a //以树状图显示进程间的关系
2. ps -aux
3. netstat -n -o -a |grep 443 |wc -l 查看各端口连接数
netstat -n -o -a |grep 80 |wc -l
4.netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 查看http的进程数
四.监听的网络服务
1. netstat -nalp
2.netstat -ntlp
3.netstat -nulp
-n或--numeric 直接使用IP地址,而不通过域名服务器。
-a或--all 显示所有连线中的Socket。
-l或--listening 显示监控中的服务器的Socket。
-p或--programs 显示正在使用Socket的程序识别码和程序名称。
-t或--tcp 显示TCP传输协议的连线状况。
-u或--udp 显示UDP传输协议的连线状况。
五. 内存 CPU 磁盘空间
1.内存
(1) free -m
第一行 : 内存总数 已使用内存数 空闲内存数 废弃内存数 缓存内存数 缓存内存数
第二行:
- buffers/cache: 已使用内存数 (指的第一行中的used – buffers – cached)
+ buffers/cache: 空闲内存数(指的第一行中的free + buffers + cached)
第三行: 指交换分区
Linux的Swap类似于Windows的虚拟内存,就是把一部分硬盘空间虚拟成内存使用,用来解决内存容量不足的问题。如果有使用到Swap,说明服务器该升级配置了。
2.CPU
(1)uptime
系统时间 系统运行时间 已登录用户的数量 系统的平均负载量: 过去一分钟 五分钟 十五分钟
注:有一种说法,当load avarage <3 系统良好,大于5 则有严重的性能问题
(2)top
第一行同uptime
第二行为进程的信息
总进程数 正在运行的进程数 睡眠进程数 停止进程数 僵尸进程数
第三行为CPU信息
us: 用户空间占用CPU百分比
sy 内核空间占用CPU百分比
ni 用户进程空间内改变过优先级的进程占用CPU百分比
id 空闲CPU百分比 //比较重要
wa 等待输入输出的CPU时间百分比
第四、五行为内存信息
Mem : 8169876 k total , 7686472 k used , 483404 k free , 35272 k buffers
物理内存总量 使用的物理内存总量 空闲内存总量 用作内核缓存的内存量
Swap : 4096532 k total , 160 k used , 4096372 k free , 2477532 k cached
交换分区总量 使用的交换区总量 空闲交换区总量 缓冲的交换区总量
3.磁盘空间
(1) df -h 显示目前在Linux系统上的文件系统的磁盘使用情况统计
文件系统的名称 总内存 使用中的内存 可使用的内存 使用的内存占总内存的百分比 挂载点
(2) du -sh * 查看当前文件夹下所有目录大小
六.io性能
1.iotop
读取速度 写入速度
2. dstat --top-mem --top-io --top-cpu 查看当前占用内存、io、CPU最高的进程信息
一、解决500错误:
1、500错误指的是服务器内部错误,也就是服务器遇到意外情况,而无法履行请求。
2、500错误一般有几种情况:
(1)web脚本错误,如php语法错误,lua语法错误等。
(2)访问量大的时候,由于系统资源限制,而不能打开过多的文件
3、一般分析思路:
(1)查看nginx error log ,查看php error log
(2)如果是too many open files,修改nginx的worker_rlimit_nofile参数,使用ulimit查看系统打开文件限制,修改/etc/security/limits.conf
(3)如果是脚本的问题,则需要修复脚本错误,并优化代码
(4)各种优化都做好,还是出现too many open files,那就要考虑做负载均衡,把流量分散到不同服务器上去了
二、解决502,504错误
1、使用nginx代理,而后端服务器发生故障;或者php-cgi进程数不够用;php执行时间长,或者是php-cgi进程死掉;已经fastCGI使用情况等都会导致502、504。
2、502 是指请求的php-fpm已经执行,但是由于某种原因而没有执行完毕,最终导致php-fpm进程终止。
一般来说,与php-fpm.conf的设置有关,也与php的执行程序性能有关,网站的访问量大,而php-cgi的进程数偏少。针对这种情况的502错误,只需增加php-cgi的进程数。
具体就是修改/usr/local/php/etc/php-fpm.conf文件,将其中的max_children值适当增加。
这个数据要依据你的VPS或独立服务器的配置进行设置。一般一个php-cgi进程占20M内存,你可以自己计算下,适量增多。
/etc/init.d/php-fpm restart 然后重启一下.
3、504 表示超时,也就是客户端所发出的请求没有到达网关,请求没有到可以执行的php-fpm。与nginx.conf的配置也有关系。