美文网首页死磕java程序员手机移动程序开发
10分钟快速定位互联网应用报障的方法

10分钟快速定位互联网应用报障的方法

作者: 老猿享说 | 来源:发表于2017-01-13 00:01 被阅读54次

    一.通常的报障类型

    1.异常流量导致服务器负载高

    2.数据库负载高(应用被刷或sql性能问题或机器很久没重启后的假象)

    3.项目上线后遇到的各种问题(服务器负载高、页面豆腐块没数据或50x、死循环、页面响应慢等)

    二.快速排查定位报障的步骤:

    第一步应用方面

    1.查看应用日志

    vi所有日志stdout、stderr、jdkout、jvm等log,都细看下

    搜索/xxxx

    按n往下查xxxx

    ctrl+f往下翻页

    ctrl+b往回翻页

    2.查看应用线程情况、monitor、jvm信息

    第二步查看服务器信息方面

    1.cpu

    1)top

    继续按

    c:按CPU占用排序且显示具体的进程明细

    M:按内存使用排序

    1:显示各CPU的使用情况

    回车:刷新数据

    “load average”为当前系统负载的平均值,三个值分别为1分钟前、5分钟前、15分钟前的平均数

    cat /proc/cpuinfo查看cpu相关参数

    cat /proc/loadavg也可看负载情况

    2.内存

    1)free -m

    注意:空闲内存=free+buffers+cached=total-used

    cat /proc/meminfo查看内存相关配置参数

    3.网络连接/IO

    1)vmstat

    vmstat 5 -S m:以5秒的数据刷新vmstat数据(单位为m)

    参数含义

    Procs

    r:等待CPU资源的进程数,大于cpu核数时cpu资源已占满

    b:处在非中断睡眠状态的进程数

    w:被交换出去的可运行的进程数。此数由linux计算得出,但linux并不耗尽交换空间

    Memory

    swpd:虚拟内存使用情况,单位:KB

    free:空闲的内存,单位KB

    buff:被用来做为缓存的内存数,单位:KB

    Swap

    si:从磁盘交换到内存的交换页数量,单位:KB/秒

    so:从内存交换到磁盘的交换页数量,单位:KB/秒

    IO

    bi:发送到块设备的块数,单位:块/秒

    bo:从块设备接收到的块数,单位:块/秒

    System

    in:每秒的中断数,包括时钟中断

    cs:每秒的环境(上下文)切换次数

    CPU

    按CPU的总使用百分比来显示

    us: CPU使用时间

    sy: CPU系统使用时间

    id:闲置时间

    2)netstat

    netstat -nat|grep -i "80"|wc -l:查看80端口下所有连接数

    netstat -an | grep ESTABLISHED | wc -l:查看正在通信的连接数

    netstat -n | awk '/^tcp/ {++S[$NF]} END {for (a in S) print a, S[a]}':查看tcp连接状态数情况

    返回结果示例:

    LAST_ACK 5

    SYN_RECV 30

    ESTABLISHED 1597

    FIN_WAIT1 51

    FIN_WAIT2 504

    TIME_WAIT 1057

    其中的

    SYN_RECV表示正在等待处理的请求数;

    ESTABLISHED表示正常数据传输状态;

    TIME_WAIT表示处理完毕,等待超时结束的请求数。

    netstat  -na:显示所有网络连接

    netstat  -nap:显示所有网络连接,并带上进程相关信息

    netstat  -nat:显示所有tcp类型的网络连接

    netstat  -ln:显示所有监听状态的网络连接

    一般跟grep组合使用

    4.进程

    1)ps

    ps -aux:显示所有用户进程详情,一般跟grep组合使用

    ps -ef:显示所有用户进程详情另一种风格,一般跟grep组合使用

    如果显示不全可以通过-w加宽,如ps aux -www

    如:ps -ef |grep java或ps -aux |grep java

    ps -ef -www|grep java或ps -aux -www|grep java

    5.JVM

    1)GC情况

    jstat

    jstat -gccapacity  :JVM各区的剩余状态

    jstat -gcutil :JVM各区的占用情况

    jstat -gccause :jstat -gcutil基础加上gc的原因

    jpid java为进程id,另外可以指定更新频率,如-h5 1s:每一秒更新一次,并每隔5条加上header显示

    示例:jstat -gcutil 31479 500

    即会每500毫秒一次显示进程号为31479的java进程的GC情况,

    详细信息

    jstat -gc31479500

    即会每500毫秒一次显示进程号为31479的java进程的GC情况,

    结果说明

    显示内容说明如下(部分结果是通过其他其他参数显示的,暂不说明):

    S0C:年轻代中第一个survivor(幸存区)的容量(字节)

    S1C:年轻代中第二个survivor(幸存区)的容量(字节)

    S0U:年轻代中第一个survivor(幸存区)目前已使用空间(字节)

    S1U:年轻代中第二个survivor(幸存区)目前已使用空间(字节)

    EC:年轻代中Eden(伊甸园)的容量(字节)

    EU:年轻代中Eden(伊甸园)目前已使用空间(字节)

    OC:Old代的容量(字节)

    OU:Old代目前已使用空间(字节)

    PC:Perm(持久代)的容量(字节)

    PU:Perm(持久代)目前已使用空间(字节)

    YGC:从应用程序启动到采样时年轻代中gc次数

    YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)

    FGC:从应用程序启动到采样时old代(全gc)gc次数

    FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)

    GCT:从应用程序启动到采样时gc用的总时间(s)

    NGCMN:年轻代(young)中初始化(最小)的大小(字节)

    NGCMX:年轻代(young)的最大容量(字节)

    NGC:年轻代(young)中当前的容量(字节)

    OGCMN:old代中初始化(最小)的大小(字节)

    OGCMX:old代的最大容量(字节)

    OGC:old代当前新生成的容量(字节)

    PGCMN:perm代中初始化(最小)的大小(字节)

    PGCMX:perm代的最大容量(字节)

    PGC:perm代当前新生成的容量(字节)

    S0:年轻代中第一个survivor(幸存区)已使用的占当前容量百分比

    S1:年轻代中第二个survivor(幸存区)已使用的占当前容量百分比

    E:年轻代中Eden(伊甸园)已使用的占当前容量百分比

    O:old代已使用的占当前容量百分比

    P:perm代已使用的占当前容量百分比

    S0CMX:年轻代中第一个survivor(幸存区)的最大容量(字节)

    S1CMX:年轻代中第二个survivor(幸存区)的最大容量(字节)

    ECMX:年轻代中Eden(伊甸园)的最大容量(字节)

    DSS:当前需要survivor(幸存区)的容量(字节)(Eden区已满)

    TT: 持有次数限制

    MTT: 最大持有次数限制

    2)jvm内存

    jmap

    jmap -dump:format=b,file=jmap.log :生成heap dump文件

    jmap -heap :显示jvm heap总体情况

    jmap -histo:live :显示类实例占用内存情况

    ./jmap -heap 29760

    分析工具:mat

    3)jvm线程

    jstack

    jstack -l :显示线程阻塞/死锁情况

    jstack -l    > /tmp/jstack.log把jvm线程栈信息导到文件上

    如jstack -l 2255 > /tmp/jstack.log

    6.磁盘空间

    1)df -h:硬盘存储总体情况

    2)du --max-depth=1 -h <路径>:指定路径下所有文件夹的大小(递归一层)

    如:du --max-depth=1 -h./

    3)du -sh <路径>:指定目录的大小

    如:du -sh./

    7.其他

    1)分析访问日志

    如:

    分析响应状态码去重

    awk '{print $9}' access.log |sort|uniq -c

    查看最近访问量最高的页面(.jsp)

    #cat access.log |awk '{print $9}'|grep '.jsp'|sort|uniq -c|sort -nr |head -n 10

    2)curl命令

    指定ua和代理ip


    文/阿青(倾力原创),写代码写诗写职场的程序猿大叔,转载此文请联系阿青。

    相关文章

      网友评论

        本文标题:10分钟快速定位互联网应用报障的方法

        本文链接:https://www.haomeiwen.com/subject/ebvjbttx.html