`

iotop&iostat (load高 IO高的问题排查)

阅读更多

目标:使用iotop&top&jstack命令定位 io高的应用以及线程信息

实现:load过高但是cpu占用率低的模拟与验证

一般load高,说明系统大量的线程在等待执行

cpu  us sy 显示都不高,并且wa 占用高,说明系统在等待大量的io操作

 

1、安装iotop

sudo yum install iotop

 

2、top命令显示



 

从top命令可以看出,系统load 6.43,对于4 cpu的系统来说,已经是超载,另外 wa 60%,可以确定系统的线程在等待io操作

其中 线程 2492 比较可疑

top -H -p 2492

 

 

3、iostat

iostat ALL :可以查阅 那个磁盘读写频繁

 

4、sudo iotop

可以查看哪些线程在 做读写io

 

 

 FileReadWrite 应用:三个线程,每个线程都在每秒36M,42M,75M的速度读写io

 

试验测试代码为:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

public class FileReadWrite {
        public static void main(String[] args) {
                for(int i =0;i<4;i++){
                        new T().start();
                }
        }
        
        
        public static class T extends Thread{
                @Override
                public void run() {
                        while (true){
                                try {
                                        exec();
                                } catch (Exception e) {
                                        e.printStackTrace();
                                }
                        }
                }
        }
        
        
        private static void exec() throws Exception{
                long start = System.currentTimeMillis();
                String fileName = "A"+System.currentTimeMillis();
                File f = new File(fileName);
                if(!f.exists()){
                        System.out.println(fileName + " created ");
                        f.createNewFile();
                }
                FileOutputStream fi = new FileOutputStream(f);
                
                int i = 0;
                while(true){
                        i++;
                        byte[] data = new byte[1024*1024*5];
                        fi.write(data);
                        if(i>50){
                                break;
                        }
                }
                fi.close();
                FileInputStream f2 =  new FileInputStream(f);
                
                byte[] data = new byte[1024*1024*1];
                int ret = f2.read(data);
                while(ret != -1){
                        data = new byte[1024*1024*1];
                        ret = f2.read(data);
                }
                boolean rt = f.delete();
                System.out.println(fileName + " deleted " + rt + "  time :" + (System.currentTimeMillis() - start));
        
        }
}

 

 

jstack 可以看大量的线程阻塞在了read 和write上:

"DestroyJavaVM" prio=10 tid=0x00007fabb4008800 nid=0x1774 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Thread-3" prio=10 tid=0x00007fabb40d6800 nid=0x1784 runnable [0x00007faba7af9000]
   java.lang.Thread.State: RUNNABLE
        at java.io.FileOutputStream.writeBytes(Native Method)
        at java.io.FileOutputStream.write(FileOutputStream.java:325)
        at FileReadWrite.exec(FileReadWrite.java:42)
        at FileReadWrite.access$000(FileReadWrite.java:6)
        at FileReadWrite$T.run(FileReadWrite.java:19)

"Thread-2" prio=10 tid=0x00007fabb40d4800 nid=0x1783 runnable [0x00007faba7bfa000]
   java.lang.Thread.State: RUNNABLE
        at java.io.FileInputStream.readBytes(Native Method)
        at java.io.FileInputStream.read(FileInputStream.java:243)
        at FileReadWrite.exec(FileReadWrite.java:54)
        at FileReadWrite.access$000(FileReadWrite.java:6)
        at FileReadWrite$T.run(FileReadWrite.java:19)

"Thread-1" prio=10 tid=0x00007fabb40d2800 nid=0x1782 runnable [0x00007faba7cfb000]
   java.lang.Thread.State: RUNNABLE
        at java.io.FileInputStream.readBytes(Native Method)
        at java.io.FileInputStream.read(FileInputStream.java:243)
        at FileReadWrite.exec(FileReadWrite.java:54)
        at FileReadWrite.access$000(FileReadWrite.java:6)
        at FileReadWrite$T.run(FileReadWrite.java:19)

"Thread-0" prio=10 tid=0x00007fabb40d0800 nid=0x1781 waiting on condition [0x00007faba7dfc000]
   java.lang.Thread.State: RUNNABLE
        at FileReadWrite.exec(FileReadWrite.java:53)
        at FileReadWrite.access$000(FileReadWrite.java:6)
        at FileReadWrite$T.run(FileReadWrite.java:19)

 

 

  • 大小: 17.4 KB
  • 大小: 40.5 KB
  • 大小: 36.7 KB
分享到:
评论

相关推荐

    io使用率排查工具 iotop x86版本

    iotop用于排查io占用率过高的问题,此资源为iotop x86平台使用(ubuntu 18.04)

    io使用率排查工具 iotop arm版本

    iotop用于排查io占用率过高的问题,此资源为iotop arm平台使用(ubuntu 18.04)

    IO负载高的来源定位

    在日常运维工作中,服务器的 IO 负载经常会达到非常高的水平,导致无法快速地定位到 IO 负载的来源进程和来源文件,从而无法进行相应的策略来解决问题。本文将介绍一个简单的流程来定位 IO 高负载的来源,帮助运维...

    iotop命令 监视磁盘I/O状态

    Linux下的IO统计工具如iostat,nmon等大多数是只能统计到per设备的读写情况,如果你想知道每个进程是如何使用IO的就比较麻烦,使用iotop命令可以很方便的查看。 语法格式:iotop [参数] 常用参数: -o 只显示有io...

    iotop-0.6.tar.gz

    这个工具可以帮助系统管理员实时监控进程的磁盘输入输出活动,对于排查性能问题、优化系统资源分配以及理解系统负载来源具有重要作用。在分析“iotop-0.6.tar.gz”这个压缩包时,我们可以深入探讨 iotop 的功能、...

    内存IO磁盘网络问题分析

    磁盘IO问题通常出现在高负载或者数据密集型应用中,表现为磁盘访问速度变慢或系统响应延迟。这类问题往往会影响到整体系统的性能和稳定性。 #### 二、磁盘IO问题分析方法 1. **磁盘空间不足** - **解决策略**:...

    iotop:IO的顶级实用程序

    您Linux服务器速度是否太慢或负载太高? 此类症状的可能原因之一可能是IO(输入/输出)等待时间过长,这基本上意味着您的某些进程需要在硬盘驱动器速度太慢且尚未准备就绪时对其进行读取或写入操作,从而为这些数据...

    Linux 查看磁盘IO并找出占用IO读写很高的进程

    `iotop -oP`会以人类可读的格式显示每个进程的读写总量、IO百分比以及进程对应的命令。通过这个信息,我们可以找到哪些进程正在大量消耗I/O资源。 - `pidstat`命令也可以提供类似的信息,尤其是`pidstat -d 1`可以每...

    iotop改进版piotop.zip

    piotop其实就是iotop,只是在其上面,自己添加了一个小功能。 如果你知道有程序在磨你的硬盘,但是你又不能确定是哪一个程序在磨你的硬盘,那么就用 iotop来帮助你吧。由于官方的-p参数不支持进程名监控,所以我自己...

    page-io.rar_page

    在实际使用中,通过工具如`iostat`、`iotop`可以监控Page IO的性能,从而对系统进行调优,例如调整内存分配、缓存策略等,以满足不同应用场景的需求。 综上所述,`page-io.rar_page`中的`page-io.c`文件可能包含的...

    iotop-0.6-1.el6.rfx.noarch.rpm

    iotop,Linux监控工具,iotop-0.6-1.el6.rfx.noarch.rpm

    iotop-0.6-4.el7.noarch.rpm

    离线安装包,亲测可用

    iotop-0.6-16.el8.noarch(1).rpm

    官方离线安装包,亲测可用

    iotop-0.6-1.noarch.rpm

    iotop最新版iotop-0.6-1.noarch.rpm

    task_io_accounting_ops.rar_Because...

    开发者和系统管理员可以使用工具,如iotop或iostat,来查看这些统计信息,帮助识别I/O瓶颈或异常行为。此外,内核开发者可能需要修改“task_io_accounting_ops.c”这样的源代码来实现新的功能或改进现有算法,以适应...

    Linux故障排查方法

    在RHEL系统中,有许多性能分析工具可供使用,如top、uptime、htop、ps、free、sar、iostat、iotop、vmstat、mpstat、dstat、pidstat、strace、tcpdump/wireshark/tshark、crash等,这些工具可以帮助我们定位性能瓶颈...

    IOTOP on Linux

    查看Linux上最消耗IO的进程,类似TOP

    Linux系统故障排查及优化.pptx

    Linux排查系统负载过高原因和瓶颈的方法包括:使用top或htop查看系统的负载情况、使用free、iotop等查看内存、磁盘I/O、网络连接情况、分析进程的内存使用情况、检查系统配置和参数设置等。 3. 找出占用负载top5的...

    Linux查看磁盘io开销的几种方法.docx

    通过top、vmstat和iostat等命令,可以有效地监控和诊断系统I/O性能问题,从而进行必要的调整和优化,确保系统的稳定运行。在日常运维中,定期检查这些指标可以帮助预防潜在的性能问题,提升系统整体效率。

Global site tag (gtag.js) - Google Analytics