• 处理Load高一直不降的故障


    问题描述

      应用部发现机器load一直飙升达到600%多, 但IO与CPU都处于正常值状态, 业务流量也没有上升, 机器资源是CPU:2核   内存:8G, 应用: 2个tomcat应用, 需要查找什么原因导致load飙升.

    处理过程

      查看uptime, 发现load值已处于600%多, 如下:

     查看vmstat 与iostat查看IO都处于0值,表现业务并没有什么流量.

    在使用top命令检查系统负载的时候,可以看到Load averages字段,但是这个字段并不是表示CPU的繁忙程度,而是度量系统整体负载。系统有很高的负载但是CPU使用率却很低,或者负载很低而CPU利用率很高,这两者没有直接关系.

    找出运行队列中的进程

    每隔1秒统计:

    #!/bin/bash
    LANG=C
    PATH=/sbin:/usr/sbin:/bin:/usr/bin
    interval=1
    length=86400
    for i in $(seq 1 $(expr ${length} / ${interval}));do
    date
    LANG=C ps -eTo stat,pid,tid,ppid,comm --no-header | sed -e 's/^ *//' | perl -nE 'chomp;say if (m!^S*[RD]+S*!)'
    date
    cat /proc/loadavg
    echo -e "
    "
    sleep ${interval}
    done

           发现有大量的df命令处于D状态, 他们才是造成load上伤的元凶,和我们的应用没有关系. 但是为什么都是df命令呢, 在机器执行df命令发现一直卡起, 马上能定位到业务部查看文件

    系统使用时都是直接退出, 找到卡其的原因, 发现这台机器上有nfs, 但是没有挂载所以才会造成执行df 一直卡起.

    D代表不可中断的睡眼进程. 找出这些df的进程, 进行kill. load慢慢就降下来了.

    检查CPU使用率比较高的线程脚本

    #!/bin/bash
    LANG=C
    PATH=/sbin:/usr/sbin:/bin:/usr/bin
    interval=1
    length=86400
    for i in $(seq 1 $(expr ${length} / ${interval}));do
    date
    LANG=C ps -eT -o%cpu,pid,tid,ppid,comm | grep -v CPU | sort -n -r | head -20
    date
    LANG=C cat /proc/loadavg
    { LANG=C ps -eT -o%cpu,pid,tid,ppid,comm | sed -e 's/^ *//' | tr -s ' ' | grep -v CPU | sort -n -r | cut -d ' ' -f 1 | xargs -I{} echo -n "{} + " && echo ' 0'; } | bc -l
    sleep ${interval}
    done
    fuser -k $0

      

  • 相关阅读:
    RecyclerView+PageSnapHelper实现ViewPager效果+自动翻页
    webview设置不弹出权限请求弹窗
    Android加载webview网页卡顿卡死,webview开启debug模式
    jira部署
    机器人视觉抓取论文及代码资源
    Vision-based Robotic Grasping From Object Localization, Object Pose Estimation to Grasp Estimation for Parallel Grippers: A Review
    机械臂智能抓取涉及什么技术?
    http://wiki.ros.org/joint_trajectory_action
    Shuran Song
    Github上优秀的.NET Core项目
  • 原文地址:https://www.cnblogs.com/zhangzihong/p/13600486.html
Copyright © 2020-2023  润新知