Java web应用性能分析之【java进程问题分析概叙】

Java web应用性能分析概叙-CSDN博客

Java web应用性能分析之客户端慢_有的客户端跑java应用特别慢-CSDN博客

Java web应用性能分析服务端慢之前端页面慢_前端页面加载性能分析-CSDN博客

Java web应用性能分析服务端慢之Nginx慢_前端nginx请求比直接连接后台慢很多-CSDN博客

Java web应用性能分析服务端慢之前端代码优化_javaweb响应缓慢的原因-CSDN博客

Java web应用性能分析之服务端慢和优化概叙_cpu飙高java-CSDN博客

Java web应用性能分析之服务端慢[网络慢]_如何排查应用服务慢-CSDN博客

Java web应用性能分析之【CPU飙升分析概述】_web页面性能分析cpu占满是因为死循环,还是循环过多-CSDN博客

Java web应用性能分析之【6种OOM监控和分析】-CSDN博客

        前面的文章,我从客户端慢和服务端慢做了分析解读,其表象无非就是linux服务器性能分析,重点是服务器资源监控,观察cpu、内存、磁盘、网络等方面的资源消耗情况,再结合运行日志、业务场景、业务逻辑实现进行综合分析。

Java web应用性能分析之【Linux服务器性能监控分析概叙】_java web内存分析工具-CSDN博客

        同样分析java进程问题也是从cpu、内存、磁盘、网络等方面的资源消耗情况入手。

java进程常见问题

        Java Web应用中的java进程问题从系统表象来看归结起来总共有四方面:CPU、内存、磁盘、网络。具体包括:

        CPU问题:CPU 使用率峰值突然飚高(cpu占用率、ws上下文切换频繁、load avg飙高),GC问题。

        内存问题:物理内存不足、溢出 (泄露)、OOM(堆、栈、元空间、线程)

        磁盘问题:磁盘空间不足或者满了、log4j日志写磁盘慢阻塞业务请求、物理磁盘性能差、操作系统的io调度算法(elevator=deadline,这个算法试图把每次请求的延迟降至最低。该算法重排了请求的顺序来提高性能);

        网络问题:网络流量异常、网络攻击、服务器带宽不足、网络io(零拷贝,dubbo支持零拷贝)、web服务器io模型(Nginx、Tomcat等)。

        业务问题:业务高并发带来的PV 量过高、服务调用耗时异常、线程死锁、多线程并发问题、频繁进行 Full GC等问题;业务逻辑问题(具体场景具体分析)。

安装前请您修改 I/O 调度方式,设置系统使用 deadline 调度器,有 2 种方法能完成 I/O 调度方式的修改:

 【方法一】 修改 grub 启动参数,操作系统启动时 deadline 全局生效。编辑 /boot/grub/menu.lst 文件,kernel 参数添加内容“elevator=deadline”:

查看磁盘调度
cat /sys/block/vda/queue/scheduler
修改 GRUB 的配置文件,重启生效

vi /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"  修改为
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=deadline"


【方法二】 执行如下命令,修改当前系统配置,操作系统重启后需重新设置: # echo deadline > /sys/block/XXX/queue/scheduler 其中 XXX 表示要修改的物理磁盘,一般应设置第二块磁盘 sdb。可使 用如下语句查看修改结果:


I/O调度方法的查看与设置
1)查看当前系统的I/O调度方法:
# cat /sys/block/sda/queue/scheduler 
noop anticipatory deadline [cfq]

2)临地更改I/O调度方法:
例如:想更改到noop电梯调度算法:
echo noop > /sys/block/sda/queue/scheduler

3)想永久的更改I/O调度方法:
修改内核引导参数,加入elevator=调度程序名
# vi /boot/grub/menu.lst
更改到如下内容:
kernel /boot/vmlinuz-2.6.18-8.el5 ro root=LABEL=/ elevator=deadline rhgb quiet

重启之后,查看调度方法:
# cat /sys/block/sda/queue/scheduler 
noop anticipatory [deadline] cfq 
已经是deadline了


Deadline(截止时间调度程序)


通过时间以及硬盘区域进行分类,这个分类和合并要求类似于noop的调度程序.
Deadline确保了在一个截止时间内服务请求,这个截止时间是可调整的,而默认读期限短于写期限.这样就防止了写操作因为不能被读取而饿死的现象.
Deadline对数据库环境(ORACLE RAC,MYSQL等)是最好的选择。

deadline实现了四个队列,其中两个分别处理正常read和write,按扇区号排序,进行正常io的合并处理以提高吞吐量.因为IO请求可能会集中在某些磁盘位置,这样会导致新来的请求一直被合并,于是可能会有其他磁盘位置的io请求被饿死。于是实现了另外两个处理超时read和write的队列,按请求创建时间排序,如果有超时的请求出现,就放进这两个队列,调度算法保证超时(达到最终期限时间)的队列中的请求会优先被处理,防止请求被饿死。由于deadline的特点,无疑在这里无法区分进程,也就不能实现针对进程的io资源控制。


对IO调度使用的建议
Deadline I/O scheduler 使用轮询的调度器,简洁小巧,提供了最小的读取延迟和尚佳的吞吐量,特别适合于读取较多的环境(比如数据库,Oracle 10G 之类).
Anticipatory I/O scheduler 假设一个块设备只有一个物理查找磁头(例如一个单独的SATA硬盘),将多个随机的小写入流合并成一个大写入流,用写入延时换取最大的写入吞吐量.适用于 大多数环境,特别是写入较多的环境(比如文件服务器)Web,App等应用我们可以采纳as调度.
CFQ I/O scheduler使用QoS策略为所有任务分配等量的带宽,避免进程被饿死并实现了较低的延迟,可以认为是上述两种调度器的折中.适用于有大量进程的多 用户系统
我在生产环境中测试过一台机器本来流量只有350M的样子,有时压力就不行了,流量也上不去了,因为读比较多, 所以使用deadline后,流量上升了50M,从流量之类的图上也见到稳定很多.

有关IO的几个内核参数
/proc/sys/vm/dirty_ratio

这个参数控制文件系统的文件系统写缓冲区的大小,单位是百分比,表示系统内存的百分比,表示当写缓冲使用到系统内存多少的时候,开始向磁盘写出数 据。增大之会使用更多系统内存用于磁盘写缓冲,也可以极大提高系统的写性能。但是,当你需要持续、恒定的写入场合时,应该降低其数值,一般启动上缺省是 10。下面是增大的方法:

echo ‘40′> /proc/sys/vm/dirty_ratio

/proc/sys/vm/dirty_background_ratio

这个参数控制文件系统的pdflush进程,在何时刷新磁盘。单位是百分比,表示系统内存的百分比,意思是当写缓冲使用到系统内存多少的时候, pdflush开始向磁盘写出数据。增大之会使用更多系统内存用于磁盘写缓冲,也可以极大提高系统的写性能。但是,当你需要持续、恒定的写入场合时,应该 降低其数值,一般启动上缺省是 5。下面是增大的方法:

echo ‘20′ > /proc/sys/vm/dirty_background_ratio

/proc/sys/vm/dirty_writeback_centisecs

这个参数控制内核的脏数据刷新进程pdflush的运行间隔。单位是 1/100 秒。缺省数值是500,也就是 5 秒。如果你的系统是持续地写入动作,那么实际上还是降低这个数值比较好,这样可以把尖峰的写操作削平成多次写操作。设置方法如下:

echo ‘200′ > /proc/sys/vm/dirty_writeback_centisecs

如果你的系统是短期地尖峰式的写操作,并且写入数据不大(几十M/次)且内存有比较多富裕,那么应该增大此数值:

echo ‘1000′ > /proc/sys/vm/dirty_writeback_centisecs

/proc/sys/vm/dirty_expire_centisecs

这个参数声明Linux内核写缓冲区里面的数据多“旧”了之后,pdflush进程就开始考虑写到磁盘中去。单位是 1/100秒。缺省是 30000,也就是 30 秒的数据就算旧了,将会刷新磁盘。对于特别重载的写操作来说,这个值适当缩小也是好的,但也不能缩小太多,因为缩小太多也会导致IO提高太快。建议设置为 1500,也就是15秒算旧。

echo ‘1500′ > /proc/sys/vm/dirty_expire_centisecs

当然,如果你的系统内存比较大,并且写入模式是间歇式的,并且每次写入的数据不大(比如几十M),那么这个值还是大些的好。



问题分析定位

        一般会采用排除法,从外部排查到内部排查的方式来定位线上服务问题。

  1. 首先我们要排除其他进程 (除主进程之外) 可能引起的故障问题;
  2. 然后排除业务应用可能引起的故障问题;
  3. 可以考虑是否为运营商或者云服务提供商所引起的故障。

分析工具

Linux性能工具:
Java web应用性能分析之【Linux服务器性能监控分析概叙】_java web内存分析工具-CSDN博客
sar:收集、报告和保存系统活动信息。

sadf:以多种格式(例如 CSV、XML、JSON 等) 显示 sar 命令的输出。

iostat:报告 CPU 统计信息和输入/输出统计信息,用于设备和分区。

mpstat:报告关于各个可用 CPU 的统计信息。

pidstat:报告关于各个进程的统计信息。

tapestat:报告磁带驱动器统计信息。

cifsiostat:报告 CIFS 文件系统统计信息。
java进程问题分析定位工具

        一般我们主要是用jdk自带工具和arthas。

jdk自带工具:jps、jinfo、jstat、jstack、jcmd、jmap、jconsole、jvisualvm

  • VisualVM
    • VisualVM是一个功能强大的Java应用程序性能分析工具、是NetBeans的profile子项目。
    • 其可以生成线程转储文件,同时还提供了堆转储、CPU和内存分析等功能。
    • 在线程面板中,monitor、running、sleeping、wait、park分别代表线程的不同状态。
    • GitHub - oracle/visualvm: VisualVM is an All-in-One Java Troubleshooting Tool
    • VisualVM: Releases
  • Eclipse MAT
    • Eclipse MAT(Memory Analyzer Tool)是一个专业的Java内存分析工具,可以分析堆转储文件,查找内存泄漏问题,分析对象引用关系等。
    • Eclipse Memory Analyzer Open Source Project | The Eclipse Foundation
  • Arthas
    • 阿里巴巴开源的Java 应用诊断利器
    • Home | arthas
  • YourKit Java Profiler
    • YourKit是一个商业化的Java性能分析工具,提供了线程转储分析功能,可以快速定位线程问题,同时还提供了内存和CPU分析功能。
    • Java Profiler Features - YourKit
  • FastThread
    • FastThread是一款针对Java线程分析的工具,可以帮助用户分析线程转储文件,查找线程问题,识别性能瓶颈等。
    • Smart Java thread dump analyzer - thread dump analysis in seconds
  • Glowroot |
    • Glowroot是一个开源的Java应用性能监控工具(Open source Java APM),可以生成线程转储文件,并提供了一些线程分析功能,如线程状态、锁信息等。
    • Glowroot
  • spotify thread dump analyzer
    • Online Java Thread Dump Analyzer
  • arthas
    • 简介 | arthas
    • https://github.com/alibaba/arthas/issues/1892

解决方案

        依据分析定位,具体问题具体解决。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/670659.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【安规介绍】

文章目录 一、基础知识安规上的六类危险的防护:安全电压漏电流接触电流能量问题:火灾问题:热问题结构问题阻燃等级绝缘等级:对接地系统的要求:结构要求:电气要求: 二、设计的关键电气绝缘距离电气爬电距离:…

四足机器人步态仿真(三)四足机器人基础步态仿真

观前提醒,本章主要内容为分析四足机器人步态实现和姿态控制,碰撞体积等程序 步态效果: 一、完整代码如下 # -*- coding: utf-8 -*-import pybullet as pimport timeimport numpy as npp.connect(p.GUI)p.createCollisionShape(p.GEOM_PLANE…

插入排序(直接插入排序、折半插入排序、希尔排序)的性能分析

目录 前言 插入排序 直接插入排序性能分析 折半插入排序性能分析 希尔排序性能分析 前言 本篇文章主要是总结插入排序的性能分析,具体的概念、算法、排序过程,我前面的文章有写,在这里就不再过多赘述了。 插入排序 插入排序是一种简单直…

MYSQL数据库细节详细分析

MYSQL数据库的数据类型(一般只需要用到这些) 整型类型:用于存储整数值,可以选择不同的大小范围来适应特定的整数值。 TINYINTSMALLINTMEDIUMINTINTBIGINT 浮点型类型:用于存储带有小数部分的数值,提供了单精度(FLOA…

2-1RT-Thread线程管理-笔记

2-1RT-Thread线程管理-笔记 其中系统线程由内核创建,如main函数和空闲线程都属于系统线程,而用户线程是由应用程序所创建的。 对于资源较大的MCU可以适当设计较大的线程栈,也可以在初始化时设置一个具体的数值,如1K或2K字节。…

【JavaEE 进阶(二)】Spring MVC(下)

❣博主主页: 33的博客❣ ▶️文章专栏分类:JavaEE◀️ 🚚我的代码仓库: 33的代码仓库🚚 🫵🫵🫵关注我带你了解更多进阶知识 目录 1.前言2.响应2.1返回静态界面2.2返回数据2.3返回HTML代码 3.综合练习3.1计算器3.2用户登…

Python 技能提升(二)

理想的类结构 Property装饰器 # 传统写法 class Square1:def __init__(self):self.__side Nonedef get_side(self):return self.__sidedef set_side(self, side):assert side > 0, 边长不能为负数!self.__side sidedef del_side(self):# del self.__sideself.…

点到线段的最短矩离 及垂足的计算

过P做MN的垂线,垂足为Q,若Q在线段MN以内(包括与点M点N重合),则最短距离为垂线段长度,若垂足在MN以外,则最短距离为PM,PN中的较小者。(若P与MN共线,垂线长度为零,同样适用…

使用 MobileNet和ImageHash做图片相似度匹配(以图搜图)

很多应用中有以图搜图的应用,那么我们应该如何实现呢? 传统的文本搜索主要是关键字匹配,而目前图片和音乐的搜索却使用使用特征向量的方式。 向量就是使用一组数从多个维度描述特征,虽然每个维度的含义我们可能无法得知&#xff…

彻底卸载Windows Defender

概述 卸载Windows Defender的方法有很多,如修改注册表、组策略,执行脚本等等,这些方法操作过于繁琐和复杂,不适合小白,今天带来一款强大的卸载工具,只需要以管理员身份运行该软件即可,不用其他操…

css特殊效果和页面布局

特殊效果 圆角边框:div{border-radius: 20px 10px 50px 30px;} 四个属性值按顺时针排列,左上的1/4圆半径为20px,右上10,右下50,左下30。 div{border-radius: 20px;} 四角都为20px。 div{border-radius: 20px 10…

系统架构设计师【第12章】: 信息系统架构设计理论与实践 (核心总结)

文章目录 12.1 信息系统架构基本概念及发展12.1.1 信息系统架构的概述12.1.2 信息系统架构的发展12.1.3 信息系统架构的定义 12.2 信息系统架构12.2.1 架构风格12.2.2 信息系统架构分类12.2.3 信息系统架构的一般原理12.2.4 信息系统常用4种架构模型12.2.5 企业信息系…

finebi或者finereport发邮件

我们二次开发中,如果想利用产品自带的发邮件的功能,来发送自己的邮件内容。 首先 决策系统中邮件相关信息要配置好之后: 这里配好了发件人,以及默认发件人后, private void sendEmail(String content,String subject)…

Nvidia Jetson/Orin +FPGA+AI大算力边缘计算盒子:潍柴雷沃智慧农业无人驾驶

潍柴雷沃智慧农业科技股份有限公司,是潍柴集团重要的战略业务单元,旗下收获机械、拖拉机等业务连续多年保持行业领先,是国内少数可以为现代农业提供全程机械化整体解决方案的品牌之一。潍柴集团完成对潍柴雷沃智慧农业战略重组后,…

ROS无人机追踪小车项目开发实战 | 第四届中国智能汽车创新大会圆满结束

2024年5月26日,阿木实验室在深圳第四届中国智能汽车创新大会上,开展的《Prometheus开源平台-ROS无人机追踪小车项目开发实战课》圆满结束。 该实战课从初学者的角度出发,通过实践性讲解和开发,使开发者们系统地学习了硬件系统架构…

Geotools--生成等值线

好久没用geotools去写东西了&#xff0c;因为近几年一直在接触所谓数字孪生和可视化相关项目&#xff0c;个人的重心也往前端可视化去倾斜&#xff0c;在后端的开发上到变得停滞下来。 这次用的是geotools 28.4版本&#xff0c;生成等值线的方法在 <dependency><group…

进程与线程(四)

进程与线程&#xff08;四&#xff09; 基于System V IPC对象的进程间通信机制SystemV IPC引入查看Linux系统中IPC工具的方式查看所有IPC工具命令&#xff1a;ipcs 查看指定的IPC工具key值获取方法&#xff1a;ftok()函数 消息队列消息队列的特征&#xff1a;消息队列的操作打开…

数学建模 —— 插值与拟合(1)

一、matlab画图 1.1 plot&#xff08;二维图形&#xff09; plot(x) —— 缺省自变量绘图格式 plot(x,y) —— 基本格式&#xff0c;以y(x)的函数关系作出直角坐标图&#xff0c;如果y为nm的矩阵&#xff0c;则以x为自变量&#xff0c;作出m条曲线 plot(x1,y1,x2,y2,…,xn,…

python深度学习入门-从零构建CNN和RNN

文章目录 第1章 基本概念1.1. 导数1.2. 链式法则1.3. 多输入函数的导数1.4. 多输入向量函数的导数1.5. 向量函数及其导数&#xff1a; 再进一步1.6. 包含两个二维矩阵数据的计算图 第2章 基本原理2.1. 监督学习概述2.2. 监督学习模型2.3. 线性回归2.3.1. 线性回归&#xff1a; …

jupyter notebook更改位置

1.找到jupyer的配置文件 一般在c盘用户的.jupter文件夹下 2. 用记事本打开这个配置文件&#xff0c;定位到c.NotebookApp.notebook_dir /path_to_your_directory 替换你的位置 3.找到jupyer图标的位置&#xff0c;打开属性 添加要存放的位置在目标文件的末尾&#xff0c;重新…