linux服务器宕机分析/性能瓶颈分析
2013-09-17 00:13
162 查看
服务器宕机原因很多,资源不足、应用、硬件、系统内核bug等,以下一个小例子
服务器宕机了,首先得知道服务器宕机的时间点,然后分析日志查找原因
1.last reboot 此命令可以查看主机起来的时间,不是宕机的时间
reboot system boot 2.4.21-27.ELsmp Mon Sep 16 02:28 (07:02) //这个是主机起来的时间
2.sar -u -f /var/log/sa/sa16 |more 查看历史cpu情况
01:10:00 AM all 12.18 0.00 3.90 36.97 46.9501:20:00 AM all 25.21 0.00 2.39 24.43 47.9601:30:00 AM all 3.72 0.00 4.03 44.92 47.3201:40:00 AM all 1.65 0.00 2.45 47.59 48.3101:50:00 AM all 31.85 0.00 2.86 18.03 47.2602:00:00 AM all 48.40 0.00 2.01 2.46 47.13 //这里才是主机宕机的时间,要看宕机原因看着个时间点的日志Average: all 10.77 0.00 2.00 14.76 72.47
02:28:07 AM LINUX RESTART
02:30:00 AM CPU %user %nice %system %iowait %idle02:40:00 AM all 0.44 0.00 1.11 0.90 97.5502:50:00 AM all 0.94 0.00 1.03 0.36 97.67
Sep 16 02:00:02 ilearndb snmpd[1138]: [smux_accept] accepted fd 11 from 10.0.1.145:46748Sep 16 02:01:53 ilearndb modprobe: modprobe: Can't locate module eth2Sep 16 02:01:53 ilearndb last message repeated 3 timesSep 16 02:05:04 ilearndb snmpd[1138]: [smux_accept] accepted fd 11 from 10.0.1.145:46824 //系统里面看到2:05分还有日志,说明2:00的时候主机hang住了,sar已经取不了数据在看sar的数据,发现(用到了swap,并且使用率在上升),是内存不足导致的主机hang住了。# sar -r -f sa16|more12:00:00 AM kbmemfree kbmemused %memused kbbuffers kbcached kbswpfree kbswpused %swpused kbswpcad12:10:00 AM 27784 2027668 98.65 14012 1668488 7436568 411176 5.24 7037212:20:00 AM 22880 2032572 98.89 15292 1673892 7436576 411168 5.24 7053612:30:01 AM 22068 2033384 98.93 16280 1672976 7436576 411168 5.24 7053612:40:00 AM 22848 2032604 98.89 17760 1671660 7436576 411168 5.24 7054012:50:00 AM 23048 2032404 98.88 18744 1670228 7436576 411168 5.24 7058001:00:00 AM 27328 2028124 98.67 19616 1664684 7436648 411096 5.24 7057201:10:00 AM 18760 2036692 99.09 8424 1714120 7418172 429572 5.47 2858401:20:00 AM 18584 2036868 99.10 14596 1731984 7413060 434684 5.54 1752001:30:00 AM 22208 2033244 98.92 2436 1739972 7421352 426392 5.43 1752001:40:00 AM 18448 2037004 99.10 3940 1742296 7421444 426300 5.43 1760001:50:00 AM 17880 2037572 99.13 6480 1727696 7410060 437684 5.58 1802802:00:00 AM 18124 2037328 99.12 10916 1718740 7408268 439476 5.60 17644Average: 21663 2033789 98.95 12375 1699728 7425990 421754 5.37 45003
02:28:07 AM LINUX RESTART
02:30:00 AM kbmemfree kbmemused %memused kbbuffers kbcached kbswpfree kbswpused %swpused kbswpcad02:40:00 AM 1517792 537660 26.16 27452 393360 7847744 0 0.00 002:50:00 AM 1337060 718392 34.95 29020 562108 7847744 0 0.00 003:00:00 AM 1330228 725224 35.28 30468 563964 7847744 0 0.00 003:10:00 AM 1218940 836512 40.70 31964 668272 7847744 0 0.00 003:20:00 AM 1218008 837444 40.74 33016 670572 7847744 0 0.00 003:30:00 AM 1208612 846840 41.20 34072 673436 7847744 0 0.00 003:40:00 AM 1200904 854548 41.57 34212 678896 7847744 0 0.00 003:50:00 AM 1201228 854224 41.56 35204 679216 7847744 0 0.00 0
可以考虑给主机增加1G内存。
附:性能瓶颈分析CPU资源的过度使用,会造成系统中出现大量的等待进程,导致应用程序响应缓慢,而进程的大量增加又会导致系统内存资源的增加,当物理内存耗尽时,系统会使用虚拟内存,而虚拟内存的使用又会造成磁盘IO的增加并加大CPU的开销。1、查看cpu是否是瓶颈 可以使用很多工具:topas、vmstat、sar、top(命令的使用网上有很多资料介绍)目前大部分CPU在同一时间只能运行一个线程,超线程的处理器可以在同一时间处理多个线程,因此可以利用超线程特性提高系统性能。在linux系统下只有运行SMP内核才能支持超线程,但是安装的CPu数量越多,从超线程获得的性能提升越少。另外linux内核会将多核的处理器当做多个单独的CPU来识别,例如,两个4核的CPU会被当成8个单个CPU,从性能角度讲,两个4核的CPU整体性能要比8个单核CPU低25%-30%。可能出现CPU瓶颈的应用有邮件服务器、动态web服务器等。CPU物理个数 》cat /proc/cpuinfo |grep "physicalid" |sort |uniq |wc -l
查看cpu几核 》cat /proc/cpuinfo |grep"cores"|uniq
逻辑cpu个数 》cat /proc/cpuinfo|grep processor|wc –l
CPU型号查看 》dmidecode |grep -B5 -A5 -i cpu
vmstat 虚拟内存统计 例: vmstat 2 3输出项的解释如下:procs
* r列表示运行和等待cpu时间片段的进程数,这个值如果长期大于系统cpu个数,说明cpu不足* b列表示在等待资源的进程数,比如正在等待IO或者内存交换等等
好: user%+sys%<70%坏: user%+sys%=85%糟糕: user%+sys%>=90%
2、查看内存是否瓶颈 内存不足时,可以使用工具观察到频繁使用虚拟内存,虚拟内存可以缓解物理内存的不足,但是虚拟内存的过多占用会导致应用程序的性能明显下降。服务器内存查看 》dmidecode |grep -B5 -A5 -i memory |grep Size
total used free shared buffers cached
Mem: 48291 33630 14660 0 24 22437
-/+ buffers/cache: 11168 37122
Swap: 0 0 0
free -m表示查看以M为单位的内存使用情况,重点需要关注free列与cached列的输出值。由输出可以得知,系统共有48G内存,系统空闲内存还有14660MB,其中buffer cache占了24MB,page cache站了22437MB。由此可知系统缓存了很多的文件和目录,对于应用程序来说还有37122MB内存可以用,当然这37122MB内存包含了buffer cache和page cache的值,从swap项看出,交换分区还未使用,从应用的角度来说,系统的内存资源还非常充足。vmstat命令可以查看
好:SwapIn(si) = 0 SwapOut(so) = 0
坏:Per CPU with 10page/s糟糕:more swap In & swap out
3. 磁盘IO性能命令 iostat 可得到相应的数值好:iowait%<20%坏:iowait% = 35%糟糕:iowait%>=50%
4.网络带宽查询QLogic HBA卡 》lspci | grep -i Fibre
user%表示CPU处在用户模式下的时间百分比sys%表示CPU处在系统模式下的时间百分比iowait%表示CPU等待输入输出完成时间的百分比swap in表示虚拟内存的页导入,从SWAP DISK交换到RAMswap out表示虚拟内存的页导出,从RAM交换到SWAP DISK
个人总结:
服务器宕机了,首先得知道服务器宕机的时间点,然后分析日志查找原因
1.last reboot 此命令可以查看主机起来的时间,不是宕机的时间
reboot system boot 2.4.21-27.ELsmp Mon Sep 16 02:28 (07:02) //这个是主机起来的时间
2.sar -u -f /var/log/sa/sa16 |more 查看历史cpu情况
01:10:00 AM all 12.18 0.00 3.90 36.97 46.9501:20:00 AM all 25.21 0.00 2.39 24.43 47.9601:30:00 AM all 3.72 0.00 4.03 44.92 47.3201:40:00 AM all 1.65 0.00 2.45 47.59 48.3101:50:00 AM all 31.85 0.00 2.86 18.03 47.2602:00:00 AM all 48.40 0.00 2.01 2.46 47.13 //这里才是主机宕机的时间,要看宕机原因看着个时间点的日志Average: all 10.77 0.00 2.00 14.76 72.47
02:28:07 AM LINUX RESTART
02:30:00 AM CPU %user %nice %system %iowait %idle02:40:00 AM all 0.44 0.00 1.11 0.90 97.5502:50:00 AM all 0.94 0.00 1.03 0.36 97.67
Sep 16 02:00:02 ilearndb snmpd[1138]: [smux_accept] accepted fd 11 from 10.0.1.145:46748Sep 16 02:01:53 ilearndb modprobe: modprobe: Can't locate module eth2Sep 16 02:01:53 ilearndb last message repeated 3 timesSep 16 02:05:04 ilearndb snmpd[1138]: [smux_accept] accepted fd 11 from 10.0.1.145:46824 //系统里面看到2:05分还有日志,说明2:00的时候主机hang住了,sar已经取不了数据在看sar的数据,发现(用到了swap,并且使用率在上升),是内存不足导致的主机hang住了。# sar -r -f sa16|more12:00:00 AM kbmemfree kbmemused %memused kbbuffers kbcached kbswpfree kbswpused %swpused kbswpcad12:10:00 AM 27784 2027668 98.65 14012 1668488 7436568 411176 5.24 7037212:20:00 AM 22880 2032572 98.89 15292 1673892 7436576 411168 5.24 7053612:30:01 AM 22068 2033384 98.93 16280 1672976 7436576 411168 5.24 7053612:40:00 AM 22848 2032604 98.89 17760 1671660 7436576 411168 5.24 7054012:50:00 AM 23048 2032404 98.88 18744 1670228 7436576 411168 5.24 7058001:00:00 AM 27328 2028124 98.67 19616 1664684 7436648 411096 5.24 7057201:10:00 AM 18760 2036692 99.09 8424 1714120 7418172 429572 5.47 2858401:20:00 AM 18584 2036868 99.10 14596 1731984 7413060 434684 5.54 1752001:30:00 AM 22208 2033244 98.92 2436 1739972 7421352 426392 5.43 1752001:40:00 AM 18448 2037004 99.10 3940 1742296 7421444 426300 5.43 1760001:50:00 AM 17880 2037572 99.13 6480 1727696 7410060 437684 5.58 1802802:00:00 AM 18124 2037328 99.12 10916 1718740 7408268 439476 5.60 17644Average: 21663 2033789 98.95 12375 1699728 7425990 421754 5.37 45003
02:28:07 AM LINUX RESTART
02:30:00 AM kbmemfree kbmemused %memused kbbuffers kbcached kbswpfree kbswpused %swpused kbswpcad02:40:00 AM 1517792 537660 26.16 27452 393360 7847744 0 0.00 002:50:00 AM 1337060 718392 34.95 29020 562108 7847744 0 0.00 003:00:00 AM 1330228 725224 35.28 30468 563964 7847744 0 0.00 003:10:00 AM 1218940 836512 40.70 31964 668272 7847744 0 0.00 003:20:00 AM 1218008 837444 40.74 33016 670572 7847744 0 0.00 003:30:00 AM 1208612 846840 41.20 34072 673436 7847744 0 0.00 003:40:00 AM 1200904 854548 41.57 34212 678896 7847744 0 0.00 003:50:00 AM 1201228 854224 41.56 35204 679216 7847744 0 0.00 0
可以考虑给主机增加1G内存。
附:性能瓶颈分析CPU资源的过度使用,会造成系统中出现大量的等待进程,导致应用程序响应缓慢,而进程的大量增加又会导致系统内存资源的增加,当物理内存耗尽时,系统会使用虚拟内存,而虚拟内存的使用又会造成磁盘IO的增加并加大CPU的开销。1、查看cpu是否是瓶颈 可以使用很多工具:topas、vmstat、sar、top(命令的使用网上有很多资料介绍)目前大部分CPU在同一时间只能运行一个线程,超线程的处理器可以在同一时间处理多个线程,因此可以利用超线程特性提高系统性能。在linux系统下只有运行SMP内核才能支持超线程,但是安装的CPu数量越多,从超线程获得的性能提升越少。另外linux内核会将多核的处理器当做多个单独的CPU来识别,例如,两个4核的CPU会被当成8个单个CPU,从性能角度讲,两个4核的CPU整体性能要比8个单核CPU低25%-30%。可能出现CPU瓶颈的应用有邮件服务器、动态web服务器等。CPU物理个数 》cat /proc/cpuinfo |grep "physicalid" |sort |uniq |wc -l
查看cpu几核 》cat /proc/cpuinfo |grep"cores"|uniq
逻辑cpu个数 》cat /proc/cpuinfo|grep processor|wc –l
CPU型号查看 》dmidecode |grep -B5 -A5 -i cpu
vmstat 虚拟内存统计 例: vmstat 2 3输出项的解释如下:procs
* r列表示运行和等待cpu时间片段的进程数,这个值如果长期大于系统cpu个数,说明cpu不足* b列表示在等待资源的进程数,比如正在等待IO或者内存交换等等
memory
* swap列表示切换到交换区的内存大小(KB为单位),如果swap的值不为0或者比较大,只要si和so长期为0,一般不是性能问题* free列表示当前空闲的物理内存数量(以KB为单位)* buff列表示buffers cache的内存数量,一般对块设备的读写才需要缓冲* cache列表示page cached的内存数量,一般作为文件系统进行缓存,频繁访问的文件都会被缓存。如果cache值较大,说明缓存文件较多,如果此时io中的bi比较小,说明文件系统效率比较好。swap
* si列表示由磁盘调入内存,也就是由内存进入内存交换区的内存大小,单位KB/秒* so列表示由内存调入磁盘,也就是由内存交换区进入内存的大小,单位KB/秒。在一般情况下,si、so的值都为0,如果si、so值长期不为0,则表示系统内存不足,需要增加系统内存。io
io项显示磁盘读写情况bi列表示从块设备读入数据的总量(即读磁盘)(kb/s)bo列表示写到块设备的数据总量(即写磁盘)(kb/s)bi+bo的参考值为1000,如果超过1000,而且wa值较大,则表示系统磁盘IO有问题,应该考虑提高磁盘的读写性能。system
显示采集间隔内发生的中断数in列表示在某一时间间隔内观测到的每秒设备中断数cs列表示每秒产生的上下文切换次数上面的两个值越大,由内核消耗的CPU时间越多。CPU
显示了CPU的使用状态,此列是关注的重点。us列显示了用户进程消耗的CPU时间百分比。us的值比较高时,说明用户进程消耗的CPU时间多,但是如果长期大约50%,就需要考虑优化算法或程序。sy列显示了内核进程消耗的CPU时间百分比。sy的值较高时,说明内核消耗的CPU资源很多。根据经验,us+sy的参考值为80%,如果us+sy大约80%,说明可能存在CPU资源不足。id列显示了CPU处在空闲时间的时间百分比。wa列显示了IO等待所占用的CPU时间百分比。wa值越高,说明IO等待越严重。根据经验,wa的参考值为20%,如果wa超过20%,说明IO等待严重,引起IO等待的原因可能是磁盘大量随机读写造成的,也可能是磁盘或者磁盘控制器的带宽瓶颈(主要是块操作)造成的。综上所述,在对CPU的评估中,需要重点注意procs项中r列的值和CPU项中us、sy和id列的值。好: user%+sys%<70%坏: user%+sys%=85%糟糕: user%+sys%>=90%
2、查看内存是否瓶颈 内存不足时,可以使用工具观察到频繁使用虚拟内存,虚拟内存可以缓解物理内存的不足,但是虚拟内存的过多占用会导致应用程序的性能明显下降。服务器内存查看 》dmidecode |grep -B5 -A5 -i memory |grep Size
free命令
free是监控linux内存使用的指令。[plain]view plaincopyfree -mtotal used free shared buffers cached
Mem: 48291 33630 14660 0 24 22437
-/+ buffers/cache: 11168 37122
Swap: 0 0 0
free -m表示查看以M为单位的内存使用情况,重点需要关注free列与cached列的输出值。由输出可以得知,系统共有48G内存,系统空闲内存还有14660MB,其中buffer cache占了24MB,page cache站了22437MB。由此可知系统缓存了很多的文件和目录,对于应用程序来说还有37122MB内存可以用,当然这37122MB内存包含了buffer cache和page cache的值,从swap项看出,交换分区还未使用,从应用的角度来说,系统的内存资源还非常充足。vmstat命令可以查看
好:SwapIn(si) = 0 SwapOut(so) = 0
坏:Per CPU with 10page/s糟糕:more swap In & swap out
3. 磁盘IO性能命令 iostat 可得到相应的数值好:iowait%<20%坏:iowait% = 35%糟糕:iowait%>=50%
4.网络带宽查询QLogic HBA卡 》lspci | grep -i Fibre
user%表示CPU处在用户模式下的时间百分比sys%表示CPU处在系统模式下的时间百分比iowait%表示CPU等待输入输出完成时间的百分比swap in表示虚拟内存的页导入,从SWAP DISK交换到RAMswap out表示虚拟内存的页导出,从RAM交换到SWAP DISK
个人总结:
总结论: 操作建议: | |||||
序号 | 检查点 | 检查方法 | 判断依据 | 结果判断 | |
1 | 系统的Uptime时间 | uptime last reboot | 如果发现系统uptime时间很短,则需要检查系统是否重启过 检查系统最近的重启时间 | ||
2 | 检查文件系统的使用率 | df -h du -hs * | sort -n (*用目录路径代替) | 对于OS的文件系统,如果发现使用率高于90%就应该再进一步检查是什么原因引起的文件系统使用率上涨。对于应用系统使用的文件系统,我们重点在于发现有没有文件系统使用率到达95%以上,若有,把情况报告给相关的人员。 | ||
3 | 检查网络状态 | ping | 网络连通性检查 | ||
ifconfig | 检查当前处于up状态的网卡 | ||||
mii-tool | link ok 显示各个网卡所接链路的状况 | ||||
ethtool eth | 查看指定网卡所接链路的状况 | ||||
ls -al /etc/resolv.conf ls -al /etc/nsswitch.conf | 确保以上文件的权限是other可读 | ||||
cat /etc/hosts | 主机名在hosts文件中只应该与机器的物理IP映射,如果出现有机器的浮动IP与主机映射就需要做进一步检查 | ||||
netstat –rn ip route ls table f5 ip rule ls | 正常情况下应该只设置了网关,而没有其它的静态路由,如果在列表中发现有其它的路由,则需要确认是否正确 | ||||
view /etc/sysconfig/network-scripts/ifcfg-eth* | 先检查子网掩码设置是否正确 再检查是否ip是否吻合 | ||||
4 | 检查ntp时间服务器设置 | ntpq -p | 正常情况下应该有如下输出信息: [root@cnsz01pl0041 ~]# ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== *10.0.16.238 118.143.17.82 2 u 24d 1024 0 3.684 0.247 0.000 | ||
5 | 进程状态 | ps –ef | grep defunct;ps -ef | wc -l;ps -ef | grep -v root | wc -l | 如果系统中存在大量的僵尸进程则属于异常的状态需要检查处理。如果只是个别进程就不需要处理。 | ||
6 | 内存状态 | free -m | 检查内存使用情况 | ||
7 | swap状态 | swapon -s | 查看swap使用百分比 | ||
8 | 检查机器性能 | vmstat | CPU:如果cpu的id字段长时间<10,该机器的CPU负载比较高 MEM:si和so字段频繁>0,则说明该机器的内存使用比较紧张 DISK:如果bi和bo频繁出现大数字,则说明该机器对磁盘的读写比较频繁。 | ||
9 | 检查磁盘性能 | iostat | 检查iowait 时长是否过大? | ||
10 | 检查系统日志 | view /var/log/messages | 可以通过检索error,fail,warn等字眼加快检查的速度 关注syslog中关于IO过程的提示信息,有无IO中断,IO丢失,SCSI reset等等 | ||
11 | 收集系统日志 | sosreport -a --batch | 收集系统日志 | ||
12 | 收集硬件日志 | DSET smartCD | Dell PC Server :用DSET 工具收集硬件日志 HP PC Server:视情况用smartCD收集硬件日志 |
相关文章推荐
- 识别和分析服务端的性能瓶颈团体
- 性能测试系统瓶颈分析的基本原则
- 分析Linux服务器性能的工具 sysstat
- Linux下Java线程具体监控和其dump的分析使用----分析Java性能瓶颈[张振华-Jack]
- 利用Xdebug分析PHP程序,找出性能瓶颈
- 基于Linux服务器的性能分析与优化(2)
- 分析影响流媒体服务器性能的硬件瓶颈
- 使用oprofile分析性能瓶颈
- vtune性能分析工具--找出程序性能瓶颈
- 利用Windows性能计数器分析软件产品的性能瓶颈
- Java线程详细监控和其dump的分析使用—-分析Java性能瓶颈
- fedora 11 下分析系统性能瓶颈之(三)sar
- 性能瓶颈分析和性能报告总结
- 网站瓶颈分析—MYSQL性能分析
- SQL on Hadoop性能瓶颈点分析及解决方法总结
- 使用Oprofile分析性能瓶颈
- 常见的性能瓶颈及分析过程
- 性能瓶颈分析方法
- 利用Xdebug分析PHP程序,找出性能瓶颈
- 如何分析系统性能瓶颈(初级)