zoukankan      html  css  js  c++  java
  • 服务器出问题了,我应该要怎么排查(cpu性能篇)?

    这里直接举例,用一台单核2G内存的服务器,部署gitlab(官方推荐是要8核的,单核肯定炸),不多说,下面直接开始实验

    在运行gitlab-ctl reconfigure 后,服务器变得异常卡顿,一段之间之后就hang在那里了

    1.首先用top指令,查看服务器究竟是哪个地方出问题了

    用top指令查看cpu指标,首先先来解释下下面这几个指标分别代表了什么

    // 用户态 CPU 时间(不包括下面的 nice 时间,但包括了 guest 时间)
    us
    // 内核态 CPU 时间
    sy
    // 低优先级用户态 CPU 时间(进程的 nice 值被调整为 1-19 之间时的 CPU 时间。这里注意,nice 可取值范围是 -20 到 19,数值越大,优先级反而越低)
    ni
    // 空闲时间(不包括等待 I/O 的时间【iowait】)
    id
    // 等待 I/O 的 CPU 时间
    wa
    // 处理硬中断的 CPU 时间
    hi
    // 处理软中断的 CPU 时间
    si
    // 系统运行在虚拟机中的时候,被其他虚拟机占用的 CPU 时间
    st
    // 补充说明,其实cpu性能的常见输出参数还有以下两个
    // 通过虚拟化运行其他操作系统的时间,也就是运行虚拟机的 CPU 时间
    guest
    // 以低优先级运行虚拟机的时间
    gnice

    详细的说明可以百度,这里的问题就是wa异常的高,也就是等待io的时间太高

    其实用top命令,下面输出的内容就基本知道原因了(这里我就不截图了),因为接下来我介绍一个非常好用的工具,能帮你快速定位到服务器究竟是哪里出了问题

    2.vmstat工具

     用vmstat查看指标后,发现cpu忙不过来,有一堆进程被阻塞了(b为29),而且内存也被占满了

    这里直接贴出以前整理好的脑图,说明下vmstat的参数

    有人可能说, 明知道cup是单核的配置,我怎么可能会让它跑那么多进程,但是这种情况我确实在生产环境(32核的cpu)遇到过,案例是这样的,有个定时计划任务,每分钟执行一次,随着数据库数据量越大,脚本处理数据的时间增强,到后期就超过了1分钟的执行时间,之后脚本慢慢的堆积起来直接把脚本服务器搞炸了,所以在执行计划任务的时候,一定要评估好,最好的方法就是每次执行先判断下该脚本在后台运行的线程数,小于一定的阈值后就不再执行,避免cpu处理不过来

    3.实验结束,清理测试环境

    执行gitlab-ctl stop(这里特别提醒一下,按照上文做完实验别立刻断开中断,不然再次连接的时候,大概率连不上),等了很久一段时间,这命令才终于执行成功

     但是ps -axu | grep -i gitlab后发现还有很多相关进程还没有被kill掉

     ps -aux | grep gitlab | awk '{print $2}' | args kill -9 执行后,发现那些进程又会重新启动,然后服务器有卡住了。。。

    没办法就只能去google了,发现了条命令

    systemctl stop gitlab-runsvdir

    执行后,很多进程都停掉了,就剩下pgsql的和一个redis,-d启动的守护进程想kill也kill不掉,接下来就不再说明怎么处理了,可以留给看到这篇博客的小伙伴们去google解决方法

     

  • 相关阅读:
    Dialog源码分析
    PopupWindow源码分析
    Snackbar源码分析
    DialogFragment源码分析
    Toast源码深度分析
    Android 经典笔记之七:CountDownTimer解读
    [置顶] mybatis分页插件实现分页
    maven下配置ssm框架
    eclipse下集成tomcat+maven框架搭建
    maven开发ssm框架所遇到的问题:
  • 原文地址:https://www.cnblogs.com/zhp-king/p/14770665.html
Copyright © 2011-2022 走看看