第二季:9.生产环境服务器变慢,诊断思路和性能评估谈谈?【Java面试题】

简介: 第二季:9.生产环境服务器变慢,诊断思路和性能评估谈谈?【Java面试题】

前言


2022 10/13 18:47

路漫漫其修远兮,吾将上下而求索


本文是根据尚硅谷学习所做笔记

仅供学习交流使用,转载注明出处

推荐

尚硅谷Java大厂面试题第2季,面试必刷,跳槽大厂神器

第二季大佬总结

9.生产环境服务器变慢,诊断思路和性能评估谈谈?

Linux诊断原因

命令集合

整机:top,查看整机系统新能



使用top命令的话,重点关注的是 %CPU、%MEM 、load average 三个指标

  • load average三个指标:分别代表1、5、15分钟的负载情况
    在这个命令下,按1的话,可以看到每个CPU的占用情况

uptime:系统性能命令的精简版

CPU:vmstat

  • 查看CPU(包含但是不限于)
  • 查看额外
  • 查看所有CPU核信息:mpstat -p ALL 2
  • 每个进程使用CPU的用量分解信息:pidstat -u 1 -p 进程编号

命令格式:vmstat -n 2 3

一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是残阳的时间间隔数(单位秒),第二个参数是采样的次数

procs

r:运行和等待的CPU时间片的进程数,原则上1核的CPU的运行队列不要超过2,整个系统的运行队列不超过总核数的2倍,否则代表系统压力过大,我们看蘑菇博客测试服务器,能发现都超过了2,说明现在压力过大

b:等待资源的进程数,比如正在等待磁盘I/O、网络I/O等
cpu

us:用户进程消耗CPU时间百分比,us值高,用户进程消耗CPU时间多,如果长期大于50%,优化程序

sy:内核进程消耗的CPU时间百分比

us + sy 参考值为80%,如果us + sy 大于80%,说明可能存在CPU不足,从上面的图片可以看出,us + sy还没有超过百分80,因此说明蘑菇博客的CPU消耗不是很高


id:处于空闲的CPU百分比


wa:系统等待IO的CPU时间百分比


st:来自于一个虚拟机偷取的CPU时间比


内存:free

  • 应用程序可用内存数:free -m
  • 应用程序可用内存/系统物理内存 > 70% 内存充足
  • 应用程序可用内存/系统物理内存 < 20% 内存不足,需要增加内存
  • 20% < 应用程序可用内存/系统物理内存 < 70%,表示内存基本够用

free -h:以人类能看懂的方式查看物理内存


free -m:以MB为单位,查看物理内存




free -g:以GB为单位,查看物理内存

硬盘:df

格式:df -h / (-h:human,表示以人类能看到的方式换算)


  • 硬盘IO:iostat
    系统慢有两种原因引起的,一个是CPU高,一个是大量IO操作

格式:iostat -xdk 2 3

磁盘块设备分布:


rkB /s:每秒读取数据量kB;


wkB/s:每秒写入数据量kB;


svctm I/O:请求的平均服务时间,单位毫秒


await I/O:请求的平均等待时间,单位毫秒,值越小,性能越好


util:一秒钟有百分几的时间用于I/O操作。接近100%时,表示磁盘带宽跑满,需要优化程序或者增加磁盘;


rkB/s,wkB/s根据系统应用不同会有不同的值,但有规律遵循:长期、超大数据读写,肯定不正常,需要优化程序读取。


svctm的值与await的值很接近,表示几乎没有I/O等待,磁盘性能好,如果await的值远高于svctm的值,则表示I/O队列等待太长,需要优化程序或更换更快磁盘

网络IO:ifstat

  • 默认本地没有,下载ifstat

    生产环境服务器变慢,诊断思路和性能评估

记一次印象深刻的故障?


结合Linux 和 JDK命令一起分析,步骤如下


使用top命令找出CPU占比最高的

ps -ef 或者 jps 进一步定位,得知是一个怎么样的后台程序出的问题

定位到具体线程或者代码

ps -mp 进程 -o THREAD,tid,time

参数解释

-m:显示所有的线程

-p:pid进程使用CPU的时间

-o:该参数后是用户自定义格式



  • 将需要的线程ID转换为16进制格式(英文小写格式)
  • printf “%x\n” 有问题的线程ID
  • jstack 进程ID | grep tid(16进制线程ID小写英文) -A60

精准定位到错误的地方




最后


2022 10


p105~p111


Markdown 2717 字数 176 行数

HTML 1801 字数 79 段落

相关文章
Minecraft配置文件参数说明(JAVA服务器篇)
Minecraft JAVA版服务器启动后会生成server.properties配置文件,位于minecraft_server/根目录下。该文件包含多项关键设置,如游戏模式(gamemode)、最大玩家数(max-players)、难度(difficulty)等。此文档详细说明了各配置项的功能与默认值,帮助用户高效管理服务器环境。
232 60
|
5月前
|
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
149 9
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
|
6月前
|
java读取linux服务器下某文档的内容
java读取linux服务器下某文档的内容
68 3
java读取linux服务器下某文档的内容
|
6月前
|
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
271 1
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
196 4
|
6月前
|
Flink-11 Flink Java 3分钟上手 打包Flink 提交任务至服务器执行 JobSubmit Maven打包Ja配置 maven-shade-plugin
Flink-11 Flink Java 3分钟上手 打包Flink 提交任务至服务器执行 JobSubmit Maven打包Ja配置 maven-shade-plugin
283 4
|
2月前
|
【Java并发】【线程池】带你从0-1入门线程池
欢迎来到我的技术博客!我是一名热爱编程的开发者,梦想是编写高端CRUD应用。2025年我正在沉淀中,博客更新速度加快,期待与你一起成长。 线程池是一种复用线程资源的机制,通过预先创建一定数量的线程并管理其生命周期,避免频繁创建/销毁线程带来的性能开销。它解决了线程创建成本高、资源耗尽风险、响应速度慢和任务执行缺乏管理等问题。
198 60
【Java并发】【线程池】带你从0-1入门线程池
|
14天前
|
【源码】【Java并发】从InheritableThreadLocal和TTL源码的角度来看父子线程传递
本文涉及InheritableThreadLocal和TTL,从源码的角度,分别分析它们是怎么实现父子线程传递的。建议先了解ThreadLocal。
51 4
【源码】【Java并发】从InheritableThreadLocal和TTL源码的角度来看父子线程传递

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等