一、JAVA性能调优之linux命令工具

news2024/11/23 0:11:18

一、linux性能收集和统计工具
二、JAVA性能调优之jdk命令工具

一、linux性能收集和统计工具

linux在性能遇到问题时,常用的查看分析命令有

  • top:能够实时显示系统各个进程的资源占用情况;
  • sar:可以周期性的对内存CPU使用情况采样;
  • vmstat:可统计CPU内存使用情况、swap使用情况等信息;
  • iostat:提供的是详细的I/O信息;
  • pidstat:可以监视进程的性能情况,也可以监视线程的情况;

下面分别介绍这几个命令参数的

1、top命令

在这里插入图片描述

top命令的输出分为两部分:前半部分是系统统计信息和进程统计信息,后半部分是进程区的信息

第1行是任务队列信息,从左到右依次为系统当前时间、系统运行时间、当前登录用户数。最后的load average表示系统的平均负载,即任务队列的平均长度,这3个值分别表示1分钟、5分钟、15分钟到现在的平均值。

第2行是进程统计信息,其含义从左到右表示正在运行的进程数、睡眠进程数、停止的进程数、僵户进程数。

第3行是CPU统计信息,us表示用户空间CPU占用率、Sy表示内核空间CPU 占用率、ni表示用户进程空间改变过优先级的进程CPU的占用率、id表示空闲CPU占用率、Wa表示等待输入输出的CPU时间百分比、hi表示硬件中断请求、si表示软件中断请求。

第4行是内存统计信息,其含义从左到右依次表示内存总量、已使用的内存、空闲内存、内核缓冲使用量。

第5行是交换区的统计信息,不做说明

进程区的列说明如下

列名含义
PID进程id
USER进程所有者的用户名
PR优先级
NInice值。负值表示高优先级,正值表示低优先级
VIRT进程使用的虚拟内存总量,单位KB。VIRT=SWAP+RES
RES进程使用的、未被换出的物理内存大小,单位KB
S进程状态,D,不可中断的睡眠状态,R,运行,S,睡眠,T,跟踪停止,Z,僵尸
%CPU上次更新到现在的CPU时间占用百分比
%MEM进程使用的物理内存百分比
TIME+进程使用的CPU时间总计,单位1/100秒
COMMAND进程名

top还有一些隐藏的列,在top下按F键,可以对列进行选择或者排序,top只能查看是哪一个进程占用资源较高

2、sar命令

sar [options] [ []]

interval和count分别表示采样周期(秒)和采样数量(采样几次)。options选项可以指定sar命令对哪些性能数据进行采样,

options参数列表

options选项选项对应含义
A所有报告的总和
uCPU利用率
d硬盘使用报告
bI/O情况
q队列长度
r内存使用统计信息
n网络信息统计

例:CPU使用情况sar -r 1 3

在这里插入图片描述

3、vmstat命令

vmstat可统计CPU内存使用情况、swap使用情况等信息,默认采样一次,也可以和sar一样设置采样频率。

在这里插入图片描述

参数含义列表

参数各列含义
Procsr:等待运行的进程数 b:处在非中断睡眠状态的进程数
Memoryswpd:虚拟内存使用情况 free:空闲的内存 buff:被用来作为缓存的内存数
Swapsi:从磁盘交换到内存的交换页数量 SO:从内存交换到磁盘的交换页数量
IObi:发送到块设备的块数 bo:从块设备接收到的块数
Systemin:每秒的中断数,包括时钟中断 CS:每秒的上下文切换次数
CPUuS:用户CPU使用时间 sy:内核CPU系统使用时间 id:空闲时间

4、iostat命令

当怀疑是磁盘I/O引起的性能问题时,可以采用iostat命令排查问题。通过iostat可以快速定位系统是否产生了大
量的IO操作。

iostat可以不跟参数运行,也可以跟上详细的参数

iostat

iostat 1 3

iostat [options] [ []] options的值可以使用 iostat -help获取
在这里插入图片描述

列参数含义

参数列含义
tps该设备每秒的传输次数
kB_read/s每秒从设备读取的数据量
kB_wrtn/s每秒向设备写入的数据量
kB_read读取的总数据量
kB_wrtn写入的总数据量
KB_dscd每秒设备丢弃的数据量

5、pidstat命令

5.1 CPU监控

1、编写一个占用CPU的程序,一个占用线程,两个空闲的线程

package com.toto.cpu;

/**
 * @Description: CpuUseDemo
 * @Package: com.toto
 * @Author gufanbiao
 * @CreateTime 2024-06-05 18:41
 */
public class Cppackage com.toto.cpu;

/**
 * @Description: CpuUseDemo
 * @Package: com.toto
 * @Author gufanbiao
 * @CreateTime 2024-06-05 18:41
 */
public class CpuUseDemo {
    public static class CpuUseMax implements Runnable {
        @Override
        public void run() {
            while (true) {
                double a = Math.random()*Math.random();
            }
        }
    }
    public static class CpuUseMin implements Runnable {
        @Override
        public void run() {
            while (true) {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    //throw new RuntimeException(e);
                }
            }
        }
    }

    public static void main(String[] args) {
        System.out.println("开启占用CPU线程");
        new Thread(new CpuUseMax()).start();
        System.out.println("开启两个不是那么占用线程的线程1");
        new Thread(new CpuUseMin()).start();
        System.out.println("开启两个不是那么占用线程的线程2");
        new Thread(new CpuUseMin()).start();
    }
}
uUseDemo {
    public static class CpuUseMax implements Runnable {
        @Override
        public void run() {
            while (true) {
                double a = Math.random()*Math.random();
            }
        }
    }
    public static class CpuUseMin implements Runnable {
        @Override
        public void run() {
            while (true) {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    //throw new RuntimeException(e);
                }
            }
        }
    }

    public static void main(String[] args) {
        // 开启占用CPU线程
        new Thread(new CpuUseMax()).start();
        // 开启两个不是那么占用线程的线程
        new Thread(new CpuUseMin()).start();
        new Thread(new CpuUseMin()).start();
    }
}

2、运行程序,使用jps查找java程序的pid

[root@localhost ~]# jps
71563 Jps
71548 CpuUseDemo

3、使用pidstat输出程序cpu的使用情况

[root@localhost ~]# pidstat -p 71548 -u 1 3
...
07:40:55 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
07:40:56 PM     0     71970  100.00    0.00    0.00  100.00     0  java
07:40:57 PM     0     71970   99.01    0.00    0.00   99.01     0  java
07:40:58 PM     0     71970  100.00    0.00    0.00  100.00     0  java
Average:        0     71970   99.67    0.00    0.00   99.67     -  java

-p用于指定进程ID

-u表示对CPU使用率的监控。

1 3表示每秒钟采样一次,合计采样3次。

从输出中可以看到,该应用程序CPU占用率几乎达100%。pidstat的功能不仅仅限于观察进程信息,它可以进一步监控线程的信息。

[root@localhost ~]# pidstat -p 71970 1 3 -u -t
Linux 3.10.0-1160.el7.x86_64 (localhost.localdomain) 	06/09/2024 	_x86_64_	(2 CPU)

08:01:00 PM   UID      TGID       TID    %usr %system  %guest    %CPU   CPU  Command
08:01:01 PM     0     71970         -  100.00    0.00    0.00  100.00     0  java
...
08:01:01 PM     0         -     71972    0.00    0.00    0.00    0.00     0  |__GC task thread#
08:01:01 PM     0         -     71973    0.00    0.00    0.00    0.00     0  |__GC task thread#
...
08:01:01 PM     0         -     71982  100.00    0.00    0.00  100.00     0  |__Thread-0
08:01:01 PM     0         -     71983    0.00    0.00    0.00    0.00     1  |__Thread-1
08:01:01 PM     0         -     71984    0.00    0.00    0.00    0.00     1  |__Thread-2

参数-t将进程中的线程级别输出,可以明确看到是71982线程较高。

进一步使用jstack -l 71982>/opt/71982.txt,可以看到是哪段代码出的问题。

“Thread-0” #8 prio=5 os_prio=0 tid=0x00007f77e0152800 nid=0x11a6a runnable [0x00007f77cb0c7000]
java.lang.Thread.State: RUNNABLE
at com.toto.cpu.CpuUseDemo$CpuUseMax.run(CpuUseDemo.java:15)
at java.lang.Thread.run(Thread.java:750)

5.2 IO监控

IO 的监控同CPU监控类似

  • 首先使用 jps 查看进程ID
  • 其次使用 pidstat -p 71970 1 3 -d -t
  • 再次使用 jstack 导出当前线程的堆栈信息,定位IO操作的代码
5.3 内存监控

该命令和参数,能查出内存的占用情况

pidstat -p -r 71970 1 3

6、话外篇

ps 命令不存在时

[root@localhost ~]# Jps
bash: Jps: command not found...
[root@localhost ~]# yum list *openjdk-devel*
[root@localhost ~]# yum install java-1.8.0-openjdk-devel.x86_64

查看java安装目录

执行命令,逐步寻找java安装目录

[root@localhost /]# which java
/usr/bin/java
[root@localhost /]# ls -lrt /usr/bin/java
lrwxrwxrwx. 1 root root 22 Jun  6 03:25 /usr/bin/java -> /etc/alternatives/java
[root@localhost /]# ls -lrt /etc/alternatives/java
lrwxrwxrwx. 1 root root 73 Jun  6 03:25 /etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64/jre/bin/java

修改环境变量文件

[root@localhost bin]# vi /etc/profile
##JAVA_HOME配置
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64/jre	
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

3.使配置生效

source /etc/profile

ot@localhost bin]# vi /etc/profile


```shell
##JAVA_HOME配置
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64/jre	
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

3.使配置生效

source /etc/profile

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

现货黄金投资价格怎么分析 低买高卖是核心!

我们做现货黄金投资,总是离不开对黄金价格的分析,分析其实就是一种理性的思考,我们对现货黄金当前走势进行一番思考,进而判断它未来的走向,以此作为自己投资入场的基础。那黄金投资价格怎么分析呢?下面我们…

MySQL 核心模块揭秘 | 20 期 | MySQL 怎么加表锁?

意向共享锁、意向排他锁、AUTO-INC 锁是 InnoDB 最常用的表锁,它们的加锁流程是什么样的? 作者:操盛春,爱可生技术专家,公众号『一树一溪』作者,专注于研究 MySQL 和 OceanBase 源码。 爱可生开源社区出品&…

Ecahrts横向柱状图自动滚动

1.定义一个定时器标识 let timer: NodeJS.Timer; // 定时器 2.定义展示的数据的条数 const dataZoomEndValue 5; // 数据窗口范围的结束数值(一次性展示几个) 3.设置datazoom的相关参数 dataZoom: [{show: false, // 是否显示滑动条xAxisIndex: 0, // 表示从X轴的零刻度线…

植物大战僵尸杂交版 MacBook 苹果电脑下载安装详细教程

最近老是看到别人玩植物大战僵尸杂交版,可是找了一圈发现都是PC版本的,原来游戏作者只做了一个PC版本,还好最终没有放弃终于在 Mac 上安装上了植物大战僵尸杂交版 版本是 2.0.88 真的蛮好玩的就是关卡有亿点点难,我最爱玩无尽模式…

四川赤橙宏海商务信息咨询有限公司靠谱吗?

在数字化浪潮席卷而来的今天,电商行业正经历着前所未有的变革。四川赤橙宏海商务信息咨询有限公司,凭借其深厚的行业经验和敏锐的市场洞察力,专注于抖音电商服务领域,致力于为广大商家提供全方位、高效益的电商解决方案。 赤橙宏…

闪烁圆点加载动画

效果图: 完整代码: <!DOCTYPE html> <html> <head><meta charset="UTF-8" /><title>闪烁圆点加载动画</title><style type="text/css">body {background: #ECF0F1;display: flex;justify-content: center;al…

Linux部署mysql8.0.28数据库

目录 1.基础准备 (1)首先去官网下载二进制安装包 (2)下载好之后上传至服务器 (3)禁用关闭selinux和防火墙 (4)挂载光盘搭建本地yum仓库 2.解压到指定目录 3.检查系统是否安装mariadb 4.安装MySQL数据库 (1)进入MySQL目录 看到‘完毕’就说面mysql已经安装成功了 4.初…

易基因:【表观遗传学基础】如何研究DNA甲基化

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 表观遗传学近几年取得的一系列研究进展&#xff0c;确实吸引着越来越多的关注&#xff01;为了帮大伙儿梳理一下表观遗传学的基本概念和研究方法&#xff0c;小编打算开一个系列专题&…

设备物联网关在实际生产中的作用解析-天拓四方

随着物联网技术的迅猛发展&#xff0c;设备物联网关作为连接物理世界与数字世界的核心组件&#xff0c;其应用已经渗透到工业、农业、医疗等多个领域。本案例将聚焦于设备物联网关在某制造企业中的应用&#xff0c;详细解析其在实际生产中的重要作用。 案例背景 某制造企业面…

wms海外仓系统重要吗?对小型海外仓有哪些好处

虽然小型海外仓本身的体量不大&#xff0c;但是在面对激烈的竞争和日益复杂的客户需求面前&#xff0c;要想赢得一席之地&#xff0c;wms海外仓系统还是一个非常必要的工具的。 对于小型海外仓来说&#xff0c;面对的业务复杂度其实并不比大型海外仓小&#xff0c;甚至更大。 …

高精度定位技术的必要性与实际应用

在当今社会&#xff0c;随着科技的飞速发展&#xff0c;高精度精准定位技术已成为一项不可或缺的基础技术&#xff0c;其应用范围涉及军事、航空、智能交通、无人驾驶、智慧城市建设等众多领域。高精度精准定位不仅为人们的日常生活带来极大便利&#xff0c;还对提升国家的科技…

Docker Hub无法访问,DBdoctor的应对之策

近期我们收到很多小伙伴的咨询&#xff1a;Docker Hub无法访问&#xff0c;DBdoctor该如何下载安装呢?本文我们将详细给大家介绍DBdoctor的多种部署方式&#xff0c;以及如何快速下载以及安装部署DBdoctor。 DBdoctor部署架构 首先我们来看下DBdoctor的部署架构&#xff0c;…

TikTok引领小众文化与亚文化:崛起与融合的新舞台

近年来&#xff0c;TikTok已经成为全球最受欢迎的社交媒体平台之一。其独特的短视频格式和强大的算法推荐系统&#xff0c;使得各种内容能够迅速传播并吸引大量观众。TikTok不仅为主流文化提供了展示平台&#xff0c;更为各种小众文化和亚文化提供了前所未有的展示机会。本文No…

推荐丨怎么才能让网站实现HTTPS访问?

网站实现HTTPS访问主要包括以下几个步骤&#xff1a; 一、选择并获取SSL证书 确定证书类型&#xff1a;根据网站的需求和预算&#xff0c;选择合适的SSL证书类型&#xff0c;如域名验证&#xff08;DV&#xff09;、组织验证&#xff08;OV&#xff09;或扩展验证&#xff08…

英语常用的英语句型,柯桥成人英语培训

句型1&#xff1a;There&#xff0b;be &#xff0b;主语&#xff0b;地点状语/ 时间状语 There’s a boat in the river. 河里有条船. 句型2&#xff1a;What’s wrong with&#xff0b;sb. / sth. &#xff1f; What’s wrong with your watch&#xff1f;你的手表有什么毛病…

虚拟化 之四 详解 jailhouse 使能和创建 Cell 的工作流程

完整的 Jailhouse 组件主要由内核模块(jailhouse.ko)、虚拟机管理程序固件(jailhouse*.bin)、管理工具(jailhouse 命令行程序及一些 Python 脚本)以及配置文件(.cell)这四部分组成。用户使用它们来启用虚拟机管理程序、创建 Cell、加载 inmate 二进制文件以及运行和停止…

Kong AI Gateway 正式 GA !

Kong Gateway 3.7 版本已经重磅上线&#xff0c;我们给 AI Gateway 带来了一系列升级&#xff0c;下面是 AI Gateway 的更新亮点一览。 AI Gateway 正式 GA 在 Kong Gateway 的最新版本 3.7 中&#xff0c;我们正式宣布 Kong AI Gateway 达到了通用可用性&#xff08;GA&…

Ubuntu22.04之有道词典无法画词翻译替代方案(二百四十九)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

NVIDIA DeepStream SDK 说明及链接

NVIDIA DeepStream SDK DeepStream 的多平台支持为您提供了一种更快、更简单的方式来开发视觉AI应用程序和服务。您甚至可以在本地、边缘和云中部署它们&#xff0c;只需单击一个按钮。 开始 在Launchpad上试用 什么是 NVIDIA DeepStream&#xff1f; NVIDIA 的 DeepStream …

蚂蚁集团:2023年科研投入211.9亿元

6月13日&#xff0c;蚂蚁集团发布2023年可持续发展报告。报告显示&#xff0c;2023年蚂蚁集团科研投入达到211.9亿元&#xff0c;再创历史新高&#xff0c;蚂蚁科技投入的重点是人工智能和数据要素技术。 蚂蚁集团董事长兼CEO井贤栋在报告致辞中说&#xff0c;面向未来&#x…