当前位置: 首页 > 科技观察

想要服务器不宕机,你知道Linux的“健康检查”指标吗?

时间:2023-03-19 21:48:41 科技观察

前言在“求佛保佑服务器宕机”、“杀程序员祭天”的环境下,程序员们每天都战战兢兢,接到电话、短信都提心吊胆。发现服务器运行问题不再只是运维问题。今天总结一下常见的服务器监控指标。我希望所有开发者都创建一个脚本来运行以保护自己的生命。文章经常被人爬,不标出原文地址。我这里的更新和纠错不能同步。这里是原文地址:http://www.cnblogs.com/zhenbianshu/p/7683496.html获取服务器信息当需要同时监控多台机器时,每台机器都需要运行一个监控程序。我们首先需要获取服务器信息来识别机器。当出现问题时,我们还可以评估问题的严重程度。获取IP获取内网IP:通过ifconfig命令获取所有网络信息,排除本地主机和ipv6信息。/sbin/ifconfig|grep网络|grep-v'127.0.0.1'|grep-vinet6|awk'{print$2}'|tr-d"addr:"注意这里要使用ifconfig的绝对路径,因为如果监控脚本是在crontab中运行的话,执行时是不会携带环境信息的。获取外网IP:我们可以通过请求其他网站来回显外网IP。有些网站提供这种服务,比如ipecho.net/plain或者我懒得建的网站:alwayscoding.net。命令如下curlalwayscoding.net获取系统信息推荐使用lsb_release-a方式获取系统信息:lsb_release-aLSBVersion::base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarchDistributorID:CentOSDescription:CentOSrelease6.5(Final)Release:6.5Codename:Final信息丰富,可以截取需要的部分字符串;CPUCPU负载是我们要监控的首要指标。我们常说的系统负载指的就是它。是指CPU在一定时间内处理进程数与CPU能处理的最大进程数的比值。即一个CPU的最大负载为1.0。在这种情况下,CPU可以执行所有进程。如果超过这个限制,系统就会进入Overload过载状态,就会有进程需要等待其他进程完成。我们通常认为CPU负载低于0.6是健康的。top命令通常用于在终端查看系统负载,但它是交互式的,而且数据越来越复杂,不利于编写监控脚本。我们一般使用uptime通过其averageload字段获取最近的1分钟、5分钟、15分钟的平均负载。uptime16:03:30up130days,23:33,1user,loadaverage:4.62,4.97,5.08此时系统的平均负载在5左右,不是系统超载了,没有报错被展示。这是因为在考虑负载时还要考虑CPU核心数。多核CPU同时处理的进程数与核心数成正比。它的最大负载不是1,而是CPU核心数N。我们可以使用nproc查看系统的CPU核心数。我使用的机器有16个核心,所以它的最大负载是16,平均负载是5/16=0.32,CPU处于健康状态。Memory内存是我们要监控的另一个核心指标。如果内存使用率过高,无疑会导致进程无法分配内存正常执行。我们也可以通过top命令查看内存使用情况,但是free命令更常用于监控:free-mtotalusedfreesharedbufferscachedMem:321081826213846048711544-/+buffers/cache:623025878Swap:000先来看Mem这一行,一共有32108M内存,已经使用了18262M,还剩下13846,那么内存使用率为18262/32108*100%=56.88%。那么,下面的shared、buffers、cached分别是什么意思呢?其实在Linux中,内存的分配也是一个惰性原则。内存分配给一个进程后,Linux不会在进程执行完后立即清理内存,而是将这部分内存作为缓存存储起来。无需重新加载;如果可用内存用完,则清空这部分缓存并重新使用。从这个角度看,used中的buffer和cached部分是可以随时重用的,不能算作被占用。而shared是进程的共享内存部分,会作为被占用的部分,但是一般用的比较少。相关内容可以看文末的参考文章。真正的数据是第三行去掉buffer和cache的部分,即真正的内存占用为6230/(6230+25878)*100%=19.4%。第四行的swap用来临时存放内存缓冲区和缓存。通常情况下,虽然可以加快进程的重启,但是当物理内存较小时,会造成swap的频繁读写,增加服务器的IO压力。是不是要看情况。网络网络也是linux作为web服务器时一个很重要的指标。相关命令有很多,但各有各的长处。我们一般监控以下状态:使用netstat查看监听端口。网络统计-an|grep听|grepTCP|grep80查看是否有进程在监听80端口。使用ping监控网络连接使用ping命令检查网络是否连通,使用-c选项控制请求次数,使用-w选项控制超时时间(单位:毫秒),***利用&&符号的短路特性来控制结果输出:ping-w100-c1weibo.com&>/dev/null&&echo"connected"硬盘并不是一个特别重要的监控指标,但是硬盘满了写文件失败也会影响进程的正常执行。我们使用df命令查看磁盘的使用情况,-h会以易读的格式输出:df-hFilesystemSizeUsedAvailUse%Mountedon/dev/vda140G6.0G32G16%/tmpfs16G016G0%/dev/shm/dev/vdb1296G16G265G6%/data0我们可以使用grep命令找到我们要查询的挂载节点,然后使用awk命令获取结果字段。另外,使用du[-h]/path/to/dir[--max-depth=n]查看目录的大小,使用--max-depth=n控制遍历深度。运行/其他监控状态主要包括进程错误日志监控、请求数监控、进程存在状态监控等,这些可以使用一些基本的命令,比如ps。有关更详细的信息,您需要使用进程日志。使用grep、awk等命令分析日志,获取更详细的信息。Summary***是监控结果的统计。您可以使用一般的“推”和“拉”方法。建议每台机器将结果推送到一台机器进行统计和告警。也可以使用rsync方式从各个服务器拉取,企业微信、短信、邮件等告警方式可以根据需要配置。***,系统监控是一件需要持续关注的重要事情。希望大家的服务器永远不要宕机。