关于top命令 经常问load average 参考:load average 定义(网易面试)

jvm dump的使用 参考:Jvm dump jstack jmap jstat 介绍与使用(内存与线程) 以及使用jstack定位问题

查看端口:如何在Windows,Linux下查看JAVA端口占用情况(阿里)

问题现象:

1,top命令查询服务器负载达到2.0-5之间,tomcat的cpu使用率达到104%

load average:

linux系统中的Load对当前CPU工作量的度量。简单的说是进程队列的长度。

Load Average 就是一段时间 (1 分钟、5分钟、15分钟) 内平均 Load 。

问题分析过程:

1),磁盘使用率未超出正常范围

df -l

2),内存使用率未超出正常范围还有空闲

free

free -m 查看linux系统内存使用量和交换区使用量,如图所示。

3),服务器流量未现明显峰值

4)jvm内存状态未现异常非GC原因

至于具体的jstat jmap jstack 的使用情况

参考:Jvm dump jstack jmap jstat 介绍与使用(内存与线程) 以及使用jstack定位问题

综合初步预估是tomcat有线程一直在运行占用cpu资源

问题引出:如何确定tomcat的100%的cpu使用率到底问题在哪?

问题定位方案:

使用java提供的是jstack线程分析命令对进程里面的线程状态进行分析,先导出线程快照再分析具体是那个线程及对应的类

执行步骤:

第一步:ps -ef|grep tomcat 查询出java/tomcat进程PID(eg:8209)

第二步:ps -aux 查询出该进程是哪个用户启动的(即使ROOT用户可能也导出线程快照失败)

第三步:su  tomcat 切换到进程启动用户

第四步:jstack -l 8209 > /usr/local/work/tomcat/8209.stack 导出PID对应的线程信息到文件

第五步:对导出的线程文件下载本地做分析(可以文本打开)

第六步:top -H -p 8209 命令查看对应进程是哪个线程占用CPU过高(eg:8308)

第七步:printf "%x\n" 8308 转换十进制为十六进制 此处为:2074

第八步:在导出的堆栈文件中搜索线程ID等于nid=0x2074的线程,此处即列出了该线程对应的类

第九步:根据线程信息找到对应的类定位问题成功,找到原因:日志队列线程一直处于RUNNABLE状态,一直在while循环判定队列是否为空

参考:服务器负载过高问题分析

服务器负载过高问题分析-不是cpu高负载也不是IO负载如何处理(阿里 几乎是必考题)的更多相关文章

  1. 负载(Load)分析及问题排查

    平常的工作中,在衡量服务器的性能时,经常会涉及到几个指标,load.cpu.mem.qps.rt等.每个指标都有其独特的意义,很多时候在线上出现问题时,往往会伴随着某些指标的异常.大部分情况下,在问题 ...

  2. 查看IO负载

    负载(load)是linux机器的一个重要指标,直观了反应了机器当前的状态.如果机器负载过高,那么对机器的操作将难以进行. Linux的负载高,主要是由于CPU使用.内存使用.IO消耗三部分构成.任意 ...

  3. 记一次排查CPU高的问题

    背景 将log4j.xml的日志级别从error调整为info后,进行压测发现CPU占用很高达到了90%多(之前也就是50%,60%的样子). 问题排查 排查思路:  看进程中的线程到底执行的是什么, ...

  4. Linux的虚拟内存管理-如何分配和释放内存,以提高服务器在高并发情况下的性能,从而降低了系统的负载

    Linux的虚拟内存管理有几个关键概念: Linux 虚拟地址空间如何分布?malloc和free是如何分配和释放内存?如何查看堆内内存的碎片情况?既然堆内内存brk和sbrk不能直接释放,为什么不全 ...

  5. sqlserver 索引优化 CPU占用过高 执行分析 服务器检查

    原文:sqlserver 索引优化 CPU占用过高 执行分析 服务器检查 1. 管理公司一台服务器,上面放的东西挺多的.有一天有个哥们告诉我现在程序卡的厉害.我给他说,是时候读点优化的书了.别一天到晚 ...

  6. [Oracle] 某游戏大区DB IO负载过高分析

    某游戏大区DB IO负载过高分析 [问题] 下图信息看出机器IO负载过高, IO使用率: 平均值 50%, 峰值 98%, 业务高峰时间段(19:00-22:00)IO使用率持续80%以上. [分析] ...

  7. Windows服务器java.exe占用CPU过高问题分析及解决

    最近在测试一个用java语言实现的数据采集接口时发现,接口一旦运行起来,CPU利用率瞬间飙升到85%-95%,一旦停止就恢复到40%以下,这让我不得不面对以前从未关注过的程序性能问题. 在硬着头皮查找 ...

  8. IO负载高的来源定位

    前言: 在一般运维工作中经常会遇到这么一个场景,服务器的IO负载很高(iostat中的util),但是无法快速的定位到IO负载的来源进程和来源文件导致无法进行相应的策略来解决问题. 这个现象在MySQ ...

  9. iotop,pt-ioprofile : mysql IO负载高的来源定位

    http://www.cnblogs.com/cenalulu/archive/2013/04/12/3016714.html 前言: 在一般运维工作中经常会遇到这么一个场景,服务器的IO负载很高(i ...

随机推荐

  1. Java之路---Day12(多态)

    2019-10-26-22:40:09 目录: 1.多态的概念 2.多态的分类 3.实现多态的三个必要条件 4.多态的格式 5.多态成员变量的使用特点 6.多态成员方法的使用特点 7.多态的好处 8. ...

  2. 【数据库-MySql】开启事件 event_scheduler

    Navicat Premium 事件计划已关闭.事件只能在服务器启动并开启事件计划时才能处理. Navicat for MySQL The event_scheduler is Off. Events ...

  3. Java 流程控制 之 分支结构——条件判断语句

    一.判断语句 1.判断语句1-- 单 if 语句(单分支结构) 语法格式: if(条件表达式){ 语句体; }  执行流程: 首先判断条件表达式看其结果是 true 还是 false: 如果是 tru ...

  4. 关于Apache安全加固的总结

    在给企业提加固方案的时候,检查服务器安全设置是必不可少的. “最小权限原则”: 当一个黑客在入侵一个网络并拿到webshell的后续就是思考是否需要提权.如果此刻的webshell直接是system或 ...

  5. 面试题:什么叫2B树

    在B树的基础上,每个节点有两个域,且他们是有顺序的,在层次上的又满足二叉排序树的性质

  6. 排序算法的c++实现——堆排序

    我们利用最大堆可以实现数组从小到大的原址排序,利用最小堆的可以实现对数组从大到小的原址排序. 1  二叉堆的简单介绍: 最大堆与最小堆可以当作通过数组来实现的一个完全二叉树,除了最底层之外其它层都是满 ...

  7. Axios的简单用法

    一转眼Vue 3.0都要发布了,学习使用Vue也有一段时间了,记录一下axios的用法 Axios 是一个基于 Promise 的 HTTP 库,可以用在浏览器和 node.js 中,有点类似于aja ...

  8. 【JMeter】压力测试工具的概览与使用

    软件工程综合实践第五次个人作业 作业要求:在软件测试章节中,我们介绍了不少VSTS的软件测试工具,请使用一些其他平台上的测试工具,并写博客介绍如何在你的项目中具体使用. 前言:   第一次看到这个作业 ...

  9. VUE router-view key 属性解释

    router-view 作用, 你可以 router-view 当做是一个容器,它渲染的组件是你使用 vue-router 指定的. <template> <section clas ...

  10. 编程题:SaturdayNightStay

    "输入2019年的一个时间段,开始时间代表出发,结束时间代表在那一天返回,判断在该时间段内,如果旅行有多少个子时间段可以在周六晚上休息" * 周六晚上休息,即子时间段必须包含周六, ...