本文主要介绍如何应对cpu负载高?(什么叫cpu过载?),下面一起看看如何应对cpu负载高?(什么叫cpu过载?)相关资讯。
首先,故障排除步骤1。使用top定位cpu使用率高的进程pid,然后按shift p按cpu排序。top command是linux下常用的性能分析工具,可以实时显示系统中各个进程的资源使用情况,类似于windows的任务管理器。
第一行,任务队列信息,与uptim: 27 : 05运行时间:up 1:57 min,当前登录用户:3用户负载均衡(正常运行时间)av: 0.00,0.00,0.00平均值后面跟着的三个数字分别是1分钟,5分钟,15分钟。负载平均数据是通过每5秒检查一次活动进程的数量,然后根据特定的算法计算出来的数值。如果这个数字除以逻辑cpu的数量,当结果高于5时,表明系统第二行任务(进程)过载。
总进程:150总,运行:1运行,休眠:149休眠,停止: 0停止,僵尸进程: 0僵尸。
第三行,cpu状态信息
0.0% us[用户空间]用户空间占用cpu的百分比。0.3% sy[sysctl]内核空间占用cpu的百分比。0.0% ni[]优先级改变的进程占用cpu的百分比99.7% id[idol]空闲cpu的百分比0.0% wa[wait]等待io占用cpu的百分比0.0% hi[硬件irq]硬中断占用cpu的百分比0.0% si[软件中断]软中断占用cpu的百分比第4行,内存状态。
总共1003020k,已用234464kused,可用777824kfree,缓冲区24084k[缓存内存量]
第五行,swap交换分区信息。
2031612ktotal,536kused,2031076kfree,505864 kcached[缓冲交换区总量]
可用内存=空闲缓冲区ca对于内存监控,在顶部,我们应该始终监控第五行中交换分区的使用情况。如果这个值是不断变化的,说明内核在内存和swap之间不断交换数据,说明真正的内存不够用。第四行,总在用内存(已用)指的是现在系统内核控制的内存,第四行,总空闲内存(空闲)指的是内核还没有纳入其控制范围的量。不是所有内核管理的内存都在用,过去可以重用的内存也在用。内核不会把这些可重用的内存归还给free,所以linux上的空闲内存会越来越少,但是don 别担心。更多linux内核视频资料免费。获取后台私信【内核】自己获取。
第六行是空白的。
第七行下面:每个流程(任务)的状态监控
pid进程id用户进程所有者pr进程优先级ninice值。负值表示高优先级,正值表示低优先级virt进程使用的虚拟内存总量,以kb为单位。virt = swap resres——由进程使用且未换出的物理内存大小,以kb为单位。res =代码数据shr以kbs为单位的共享内存大小进程状态。d=不间断睡眠状态r=运行s=睡眠t=跟踪/停止z=僵尸进程% cpu自上次更新以来占用的cpu时间百分比% mem进程时间使用的物理内存百分比进程使用的总cpu时间,单位1/100秒命令进程名(命令名/命令行)详细信息。
virt:虚拟内存使用虚拟内存1。进程 的虚拟内存的大小需求与展望,包括库、代码、数据等。2.如果进程申请了100 m的内存,但实际上只使用了10m,那么它将增长100m,而不是实际使用量res:resident内存使用量memory resident 1。进程当前使用的内存大小,但不包括换出2。与其他进程共享3。如果申请100m内存,实际使用10m,只会增加10m,与virt 4相反。关于库占用的内存,只统计加载的库文件shr: shared memory共享内存1占用的内存大小。除了自己的进程2之外,它还包括其他进程的共享内存。虽然该进程只使用了几个共享库函数,但它包含了整个共享库的大小3。计算出一个进程占用物理内存大小的公式:res–shr 4和swap out后,会减少data1和data占用的内存。如果top不 t有一个显示器。按f键显示它。2.这个程序所需要的真实数据空间是真正在操作中使用的。在top运行期间,可以通过top的内部命令来控制过程的显示模式。内部命令如下:s更改屏幕更新频率l关闭或打开第一部分第一行中顶部信息的表示t关闭或打开第二行中任务和第三行中cpu信息的表示m关闭或打开第一部分第四行中mem和第五行中交换信息的表示n排列列表 按pid大小的顺序排列进程pc .按pu占用的顺序排列进程列表m–按内存占用的顺序排列进程列表h–显示帮助n–设置进程列表中显示的进程数量q–退出top–更改屏幕更新周期top使用:
用法格式:top[][d][p][q][c][c][s][n][c][c][s][n]参数说明:d:指定两次屏幕信息刷新的时间间隔。当然,用户可以使用s interactiv:仅通过指定监控进程id来监控进程的状态。q:这个选项将使顶部刷新没有任何延迟。如果调用者拥有超级用户权限,那么top将以可能的最高优先级运行。s:指定累计模式。让top命令在安全模式下运行。这将消除由交互命令引起的潜在危险。i:使top不显示任何空闲或死亡的进程。c:显示整个命令行,而不仅仅是命令名。这时候发现如果java的进程占用太多而can 不要一直下去,要搞清楚是什么线程导致比例高。以图中的过程为例。如果发现pid为31357的java进程一直占用很高的cpu比率,记录它的pid。
2.检查java进程中线程的占用情况。
top h p 31357然后按shift p按cpu排序。
描述:h表示显示线程,p表示指定的进程。
可以看到cpu使用率高的线程,记下它们的pid,假设这里31357的cpu比率始终是50%。
或者用ps mp pid o thread,tid,time查询进程,哪个线程的cpu占用率高。记住tid会把上图中线程占用率最高的29108转换成十六进制的 71b4。
3.通过jstack命令获取资源占用异常的线程栈,可以临时保存到一个文件中查看jstack 31357 jstack.31357原木
可以看到上面指定线程的堆栈信息。如果您想查看关于线程中锁的附加信息,您可以添加一个l参数。
4.上述方法用于正常工艺条件下的叠层印刷。
使用jstack l命令时没有响应。估计cpu已经站不住了,可以 不要执行普通的命令。根据提示【目标进程不响应时可以使用f选项】,只能放大。
f &;pid&; jstack。“pid”。文本文件(textfile)
实际的日志结果如下所示:
发现大量线程被阻塞,有用的结果在这里:
很明显,线程19576已经运行,excel导出的相关方法已经实现。这就是问题所在。下面的任务是检查这个地方的代码逻辑。
jstack命令格式:
jstack [选项] pid
参数描述:
pid can t respond,它强制打印一个很长的stack列表l l l .打印关于锁的附加信息,比如属于java.util.concurrent m混合模式输出(包括java和本地c/c片段)stack的ownabl: java应用的process number 5jps命令查看java进程的pid更实用。
jps [选项] [主机id ]
参数描述:
m输出传递给main方法的参数,如果是嵌入式jvm,则为null。l输出应用程序主类的完整包名或应用程序jar文件的完整路径。v输出传递给jvm的参数。三个参数相加显示更详细的信息:
发现jmx的远程端口是在这些java进程的启动参数中打开的。一般情况下,通过jconsole远程连接可以看到jvm的日常参数。例如,在本地访问上图中的pay.war流程:
了解更多如何应对cpu负载高?(什么叫cpu过载?)相关内容请关注本站点。