服务器负载过高如何定位

遇到服务器负载过高,通常通过下面基本查看定位:
1.登录服务器,先执行top命令,查看CPU占用情况:

$top
   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
  1893 admin     20   0 7127m 2.6g  38m S 181.7 32.6  10:20.26 java

2.定位进程相关的线程

$top -Hp 1893
   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
  4519 admin     20   0 7127m 2.6g  38m R 18.6 32.6   0:40.11 java

通过top命令,我们目前已经定位到导致CPU使用率较高的具体线程, 那么我么接下来就定位下到底是哪一行代码存在问题。

首先,我们需要把4519这个线程转成16进制:

$printf %x 4519
11a7

接下来,通过jstack命令,查看栈信息:

$sudo -u admin  jstack 1893 |grep -A 200 11a7
"HSFBizProcessor-DEFAULT-8-thread-5" #500 daemon prio=10 os_prio=0 tid=0x00007f632314a800 nid=0x11a2 runnable [0x000000005442a000]
   java.lang.Thread.State: RUNNABLE
  at sun.misc.URLClassPath$Loader.findResource(URLClassPath.java:684)
  at sun.misc.URLClassPath.findResource(URLClassPath.java:188)
  at java.net.URLClassLoader$2.run(URLClassLoader.java:569)
  at java.net.URLClassLoader$2.run(URLClassLoader.java:567)
  at java.security.AccessController.doPrivileged(Native Method)
  at java.net.URLClassLoader.findResource(URLClassLoader.java:566)
  at java.lang.ClassLoader.getResource(ClassLoader.java:1093)
  at java.net.URLClassLoader.getResourceAsStream(URLClassLoader.java:232)
  at org.hibernate.validator.internal.xml.ValidationXmlParser.getInputStreamForPath(ValidationXmlParser.java:248)
  at org.hibernate.validator.internal.xml.ValidationXmlParser.getValidationConfig(ValidationXmlParser.java:191)
  at org.hibernate.validator.internal.xml.ValidationXmlParser.parseValidationXml(ValidationXmlParser.java:65)
  at org.hibernate.validator.internal.engine.ConfigurationImpl.parseValidationXml(ConfigurationImpl.java:287)
  at org.hibernate.validator.internal.engine.ConfigurationImpl.buildValidatorFactory(ConfigurationImpl.java:174)
  at javax.validation.Validation.buildDefaultValidatorFactory(Validation.java:111)
  at com.test.common.util.BeanValidator.validate(BeanValidator.java:30)

至此,能清楚的知道具体是哪里的业务代码存在问题。
以上,展示了一次比较完成的线上问题定位过程。主要用到的命令有:top 、printf 和 jstack

服务器负载低的判定通常基于以下指标: 1. CPU 使用率:服务器的 CPU 使用率表示 CPU 正在执行任务的比例。如果 CPU 使用率持续接近或达到 100%,则表示负载。 2. 内存使用率:服务器的内存使用率表示已使用内存与总内存容量的比例。如果内存使用率接近或达到 100%,则表示负载。 3. 磁盘 I/O:磁盘 I/O 是指磁盘读写操作的速度。如果磁盘 I/O 频繁且持续于正常水平,可能表明负载。 4. 网络带宽使用率:服务器的网络带宽使用率表示已使用带宽与总可用带宽的比例。如果网络带宽使用率接近或达到 100%,则表示负载。 5. 进程队列长度:进程队列长度表示等待 CPU 资源的进程数量。如果进程队列长度持续增加,表明负载。 要判断服务器负载是否过,需要监控这些指标并与服务器的性能极限进行比较。一般来说,如果这些指标超过了服务器的正常运行水平,并且持续一段时间,那么可以认为服务器负载。 您可以使用系统自带的监控工具(如top、htop等)或第三方监控工具(如Zabbix、Nagios等)来监控服务器负载。另外,还可以编写自定义的脚本来定期检查和记录这些指标,并设置阈值进行报警。 请注意,不同的服务器和应用程序可能有不同的性能特点和负载限制。因此,最好根据您的具体情况和需求来确定负载的标准。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值