IT服务器运维:什么是负载?如何查看服务器的机器负载情况?
2020-03-30 17:03 作者:艾锑无限 浏览量:
“中国策”,为全球战“疫”开出药方
面对突如其来的新冠肺炎疫情,中国政府、中国人民不畏艰险,始终把人民生命安全和身体健康摆在第一位,按照坚定信心、同舟共济、科学防治、精准施策的总要求,坚持全民动员、联防联控、公开透明,打响了一场抗击疫情的人民战争。经过艰苦努力,付出巨大牺牲,目前中国国内疫情防控形势持续向好,生产生活秩序加快恢复,但我们仍然丝毫不能放松警惕。
在中方最困难的时候,国际社会许多成员给予中方真诚帮助和支持,我们会始终铭记并珍视这份友谊。
重大传染性疾病是全人类的敌人。新冠肺炎疫情正在全球蔓延,给人民生命安全和身体健康带来巨大威胁,给全球公共卫生安全带来巨大挑战,形势令人担忧。当前,国际社会最需要的是坚定信心、齐心协力、团结应对,全面加强国际合作,凝聚起战胜疫情强大合力,携手赢得这场人类同重大传染性疾病的斗争。
中国提出以下4点倡议。
第一,坚决打好新冠肺炎疫情防控全球阻击战。国际社会应该加紧行动起来,坚决遏制疫情蔓延势头。中国愿在此提议,尽早召开二十国集团卫生部长会议,加强信息分享,开展药物、疫苗研发、防疫合作,有效防止疫情跨境传播。要携手帮助公共卫生体系薄弱的发展中国家提高应对能力。中国建议发起二十国集团抗疫援助倡议,在世界卫生组织支持下加强信息沟通、政策协调、行动配合。中方秉持人类命运共同体理念,愿同各国分享防控有益做法,开展药物和疫苗联合研发,并向出现疫情扩散的国家提供力所能及的援助。
第二,有效开展国际联防联控。病毒无国界。疫情是我们的共同敌人。各国必须携手拉起最严密的联防联控网络。中方已经建立新冠肺炎疫情防控网上知识中心,向所有国家开放。要集各国之力,共同合作加快药物、疫苗、检测等方面科研攻关,力争早日取得惠及全人类的突破性成果。要探讨建立区域公共卫生应急联络机制,提高突发公共卫生事件应急响应速度。
第三,积极支持国际组织发挥作用。中方支持世界卫生组织发挥领导作用,制定科学合理防控措施,尽力阻止疫情跨境传播。中国建议,二十国集团依托世界卫生组织加强疫情防控信息共享,推广全面系统有效的防控指南。要发挥二十国集团的沟通协调作用,加强政策对话和交流,适时举办全球公共卫生安全高级别会议。中国将同各国一道,加大对相关国际和地区组织的支持力度。
第四,加强国际宏观经济政策协调。疫情对全球生产和需求造成全面冲击,各国应该联手加大宏观政策对冲力度,防止世界经济陷入衰退。要实施有力有效的财政和货币政策,促进各国货币汇率基本稳定。要加强金融监管协调,维护全球金融市场稳定。要共同维护全球产业链供应链稳定,中国将加大力度向国际市场供应原料药、生活必需品、防疫物资等产品。要保护妇女儿童,保护老年人、残疾人等弱势群体,保障人民基本生活。中国将继续实施积极的财政政策和稳健的货币政策,坚定不移扩大改革开放,放宽市场准入,持续优化营商环境,积极扩大进口,扩大对外投资,为世界经济稳定作出贡献。
中国呼吁二十国集团成员采取共同举措,减免关税、取消壁垒、畅通贸易,发出有力信号,提振世界经济复苏士气。我们应该制定二十国集团行动计划,并就抗疫宏观政策协调及时作出必要的机制性沟通和安排。
值此关键时刻,我们应该直面挑战、迅速行动。中国坚信,只要我们同舟共济、守望相助,就一定能够彻底战胜疫情,迎来人类发展更加美好的明天!
转载人民日报
IT服务器运维:什么是负载?如何查看服务器的机器负载情况?
平常的工作中,在衡量服务器的性能时,经常会涉及到几个指标,load、cpu、mem、qps、rt等。每个指标都有其独特的意义,很多时候在线上出现问题时,往往会伴随着某些指标的异常。大部分情况下,在问题发生之前,某些指标就会提前有异常显示。
对于这些指标的理解和查看、异常解决等,是程序员们重要的必备技能。本文,主要来介绍一下一个比较重要的指标——机器负载(Load),主要涉及负载的定义、查看负载方式、负载飙高排查思路等。
什么是负载
负载(load)是linux机器的一个重要指标,直观了反应了机器当前的状态。
来看下负载的定义是怎样的:
In UNIX compu
TIng, the system load is a measure of the amount of computa
TIonal work that a computer system performs. The load average represents the average system load over a period of
TIme. It conven
TIonally appears in the form of three numbers which represent the system load during the last one-, five-, and fifteen-minute periods.(wikipedia)
简单解释一下:在UNIX系统中,系统负载是对当前CPU工作量的度量,被定义为特定时间间隔内运行队列中的平均线程数。load average 表示机器一段时间内的平均load。这个值越低越好。负载过高会导致机器无法处理其他请求及操作,甚至导致死机。
Linux的负载高,主要是由于CPU使用、内存使用、IO消耗三部分构成。任意一项使用过多,都将导致服务器负载的急剧攀升。
查看机器负载
在Linux机器上,有多个命令都可以查看机器的负载信息。其中包括uptime、top、w等。
uptime命令
uptime命令能够打印系统总共运行了多长时间和系统的平均负载。uptime命令可以显示的信息显示依次为:现在时间、系统已经运行了多长时间、目前有多少登陆用户、系统在过去的1分钟、5分钟和15分钟内的平均负载。
这行信息的后半部分,显示“load average”,它的意思是“系统的平均负荷”,里面有三个数字,我们可以从中判断系统负荷是大还是小。
1.74 1.87 1.97 这三个数字的意思分别是1分钟、5分钟、15分钟内系统的平均负荷。我们一般表示为load1、load5、load15。
w命令
w命令的主要功能其实是显示目前登入系统的用户信息。但是与who不同的是,w命令功能更加强大,w命令还可以显示:当前时间,系统启动到现在的时间,登录用户的数目,系统在最近1分钟、5分钟和15分钟的平均负载。然后是每个用户的各项数据,项目显示顺序如下:登录帐号、终端名称、远 程主机名、登录时间、空闲时间、JCPU、PCPU、当前正在运行进程的命令行。
从上面的w命令的结果可以看到,当前系统时间是14:08,系统启动到现在经历了23小时41分钟,共有3个用户登录。系统在近1分钟、5分钟和15分钟的平均负载分别是1.74 1.87 1.97。这和uptime得到的结果相同。 下面还打印了一些登录的用户的各项数据,不详细介绍了。
top命令
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。
上面的输出结果中,Load Avg: 1.74, 1.87, 1.97显示的就是负载信息。
机器正常负载范围
对于机器的Load到底多少算正常的问题,一直都是很有争议的,不同人有着不同的理解。对于单个CPU,有人认为如果Load超过0.7就算是超出正常范围了。也有人认为只要不超过1都没问题。也有人认为,单个CPU的负载在2以下都可以接受。
为什么会有这么多不同的理解呢,是因为不同的机器除了CPU影响之外还有其他因素的影响,运行的程序、机器内存、甚至是机房温度等都有可能有区别。
比如,有些机器用于定时执行大量的跑批任务,这个时间段内,Load可能会飙的比较高。而其他时间可能会比较低。那么这段飙高时间我们要不要去排查问题呢?
我的建议是,最好根据自己机器的实际情况,建立一个指标的基线(如近一个月的平均值),只要日常的load在基线上下范围内不太大都可以接收,如果差距太多可能就要人为介入检查了。
但是,总要有个建议的阈值吧,关于这个值。阮一峰在自己的博客中有过以下建议:
当系统负荷持续大于0.7,你必须开始调查了,问题出在哪里,防止情况恶化。
当系统负荷持续大于1.0,你必须动手寻找解决办法,把这个值降下来。
当系统负荷达到5.0,就表明你的系统有很严重的问题,长时间没有响应,或者接近死机了。你不应该让系统达到这个值。
以上指标都是基于单CPU的,但是现在很多电脑都是多核的。所以,对一般的系统来说,是根据cpu数量去判断系统是否已经过载(Over Load)的。如果我们认为0.7算是单核机器负载的安全线的话,那么四核机器的负载最好保持在3(4*0.7 = 2.8)以下。
还有一点需要提一下,在Load Avg的指标中,有三个值,1分钟系统负荷、5分钟系统负荷,15分钟系统负荷。我们在排查问题的时候也是可以参考这三个值的。
一般情况下,1分钟系统负荷表示最近的暂时现象。15分钟系统负荷表示是持续现象,并非暂时问题。如果load15较高,而load1较低,可以认为情况有所好转。反之,情况可能在恶化。
如何降低负载
导致负载高的原因可能很复杂,有可能是硬件问题也可能是软件问题。
如果是硬件问题,那么说明机器性能确实就不行了,那么解决起来很简单,直接换机器就可以了。
前面我们提过,CPU使用、内存使用、IO消耗都可能导致负载高。如果是软件问题,有可能由于Java中的某些线程被长时间占用、大量内存持续占用等导致。建议从以下几个方面排查代码问题:
1、是否有内存泄露导致频繁GC
2、是否有死锁发生
3、是否有大字段的读写
4、会不会是数据库操作导致的,排查SQL语句问题。
这里还有个建议,如果发现线上机器Load飙高,可以考虑先把堆栈内存dump下来后,进行重启,暂时解决问题,然后再考虑回滚和排查问题。
Java Web应用Load飙高排查思路
发现PID为1893的进程占用CPU 181%。而且是一个Java进程,基本断定是软件问题。
3、使用 top命令,查看具体是哪个线程占用率较高
5、使用jstack命令查看当前线程正在执行的方法。(Java命令学习系列(二)——Jstack)
从上面的线程的栈日志中,可以发现,当前占用CPU较高的线程正在执行我代码的com.hollis.test.util.BeanValidator.validate(BeanValidator.java:30) 类。那么就可以去排查这个类是否用法有问题了。
6、还可以使用jstat(Java命令学习系列(四)——jstat)来查看GC情况,看看是否有频繁FGC,然后再使用jmap(Java命令学习系列(三)——Jmap)来dump内存,查看是否存在内存泄露。