尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Linux系统基础运维----2.cpu篇

Linux系统基础运维----2.cpu篇 cpu是我们服务器最核心的计算资源之一负责执行系统和应用系统指令1.其中关于运行状态中cpu最有可能出现以下问题1.CPU使用率持续过高2.某个进程占用大量CPU3.系统负载Load Average过高4.CPU使用率不高但是系统依然很卡5.某个程序出现死循环6.大量进程同时运行导致CPU竞争7.Web服务器访问量增加导致CPU资源不足因此遇到服务器运行缓慢的问题时CPU通常是首先需要检查的指标之一。作为Linux工程师我们的排查思路发现cpu异常-----判断异常类型------定位异常-----分析原因-------解决问题---------优化预防每次碰到新的服务器首要就是查看cpu型号知己知彼cat /proc/cpuinfo可见cpu型号cpu厂商2.cpu日常巡检命令top/htop命令最常用的cpu分析工具top重点字段从上往下看分别表示了现在是什么时间已经运行了多久有几个登录用户系统负载如何三个值分别代表5分钟内10分钟内15分钟内服务器共有多少个任务当前运行任务数量当前睡眠任务数量当前停止的进程也就是手动停止的进程1个僵尸进程僵尸进程的大量出现会导致pid资源消耗系统管理困难程序设计异常僵尸进程查看方法ps aux | grep Zdefunctt进程就是僵尸进程us为用户当前cpu使用率比如说python进程占用等等。常见原因Java程序计算Python程序计算数据库查询Web程序死循环大量业务请求sy为内核态cpu使用率常见原因大量系统调用网络数据包处理磁盘I/O进程频繁创建内核模块工作网络连接数量过多ni为调整过优先级的进程使用率id为cpu空闲率wa为I/O等待CPU时间hi为硬件中断数si为软件终端数最重要的是ussyidwasttotal表示内存总量free表示完全空闲的内存used表示已使用的内存buff主要用于内核对块设备等I/O操作的缓存。abail表示真正可用空间服务器可用内存通常等于availfreezmen是内存就是你电脑/服务器真正的 RAM。Swap是Linux系统在磁盘上划分的一块交换空间。当物理内存不足时系统可以将部分暂时不用的内存数据交换到Swap中从而缓解物理内存压力。但是Swap性能远低于物理内存所以大量使用Swap通常意味着内存存在压力需要进一步排查。ps命令ps auxpid字段是进程id%CPU就是这个进程当前消耗的cpu资源比例%MEM表示这个进程占用了多少比例的物理内存。COMMAND表示这个进程对应的程序或者命令ps aux --sortcpu | grep寻找占用cpu最高的进程ps -ef-e显示所有进程-f表示使用完整格式显示进程信息实际排障过程服务器CPU突然100%。第一步ps aux --sort-%cpu | head发现root 1234 99.5 2.0 ... python 知道PID 1234 CPU 99.5% 程序 python然后ps -ef | grep 1234进一步看它到底是怎么启动的。可能得到root 1234 850 ... python /opt/app/main.pyPID1234PPID850启动用户root启动命令python /opt/app/main.py根据信息继续进行排查kill —— 进程管理kill PIDkill本质是向进程发送信号kill -15 1234这是比较正常、优雅的结束方式。意思是告诉程序你该退出了请正常结束程序可以保存数据关闭文件释放资源正常退出kill -9 PIDkill -9 1234强制终止进程。程序无法正常处理这个信号。-15失效才考虑这个uptime打开的当前时间up表示系统已运行的时间user表示当前有几个用户登录load average表示5分钟10分钟15分钟的系统中等待CPU处理或者处于不可中断等待状态的任务数量Load Average不是CPU使用率为什么Load会升高主要考虑两大类问题CPU计算压力例如大量程序----大量任务等待CPU-------Load升高例如Python计算Java程序数据库计算大量并发请求CPU密集型任务I/O等待例如大量任务------等待磁盘I/O---Load升高 这时候可能出现CPU使用率并不高Load却很高所以如果看到这种情况就应该继续检查iostat -x 1或者vmstat 1比如说4核cpu执行uptime得到load average: 8.00, 7.50, 6.80他明显大于cpu核心数然后执行top%Cpu(s): 95 us, 3 sy, 0 id, 2 wa发现cpu已经跑满接下来ps aux --sort-%cpu | head发现python PID 1234 CPU 380%python进程占满cpu另一种情况还是4核CPU Load Average 8 但是 %Cpu(s): us 5% sy 3% id 12% wa 80% 这时候就不能继续盯着CPU了。因为wa 80%说明大量时间在等待I/O。下一步iostat -x 1检查磁盘。这就是运维排障中非常重要的不要看到Load高就直接认为CPU有问题。vmstat——查看系统整体运行状态什么是 vmstatvmstat它可以查看Linux系统的整体资源状态包括进程CPU内存SwapI/O最常用vmstat 1每隔1秒输出一次r表示运行队列正在运行或者等待CPU运行的进程数量。r 1说明当前只有少量任务等待CPU。r高任务多cpu可能忙不过来b处于不可中断睡眠状态的进程数量。通常和I/O等待有关系。例如 b 10说明有一些任务正在等待某些资源。和i/o挂钩us CPU用于执行用户程序的时间比例。sy表示CPU用于执行Linux内核代码的时间比例。id表示CPU处于空闲状态的时间比例。wa---i/o等待CPU等待I/O操作完成的时间比例比如说wa 75那就是系统可能不是CPU计算能力不够而是在大量等待I/O。st——被虚拟化平台偷走的CPUiostatiostatI/O Statistics主要来看磁盘读写磁盘利用率i/o等待磁盘响应时间i/o吞吐量-x 表示 磁盘详细信息 1表示每一秒刷新一次比如说wa80%CPU大量时间在等待I/O。这样可以查看哪个磁盘有问题首先收到CPU报警或者发现服务器卡顿我会先使用top确认CPU是否真的存在高负载重点观察us、sy、wa、st以及Load Average。然后根据CPU指标判断问题方向如果是用户态或内核态CPU占用较高再使用ps等工具定位CPU占用较高的进程。确认具体进程后判断它属于正常业务还是异常进程。如果是正常业务导致资源不足则进一步考虑程序优化、限流、扩容或者增加实例如果是异常进程则结合日志和业务情况进行处理必要时停止或重启服务。处理完成后再次观察CPU和Load是否恢复正常。如果发现wa较高则进一步使用vmstat和iostat排查I/O问题。
返回列表