0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

查看Linux文件占用進程寫數(shù)據(jù)

dyquk4xk2p3d ? 來源:良許Linux ? 作者:良許Linux ? 2022-11-04 16:46 ? 次閱讀

	

背景

centos7 在某一段時間監(jiān)控報警磁盤使用率達99%,由于監(jiān)控屬于概要形式信息,沒有快照信息的監(jiān)控(能發(fā)現(xiàn)某進程的I/O,CPU消耗情況),所以需要在服務(wù)器上去定時執(zhí)行統(tǒng)計命令獲取快照信息。 需要通過iostat -dx -k去查看avgqu-sz、await、svctm、%util; sar -u查看%iowait、%user; pidstat -d 查看進程I/O讀寫的快照信息

步驟

  • 生成統(tǒng)計信息文件

cat>/tmp/at_task.sh</tmp/pidstat_`date +%F_%T`.log 2>& 1 &
sar -u 2  >/tmp/sar_`date +%F_%T`.log 2>& 1 &
while [ 1 ];do echo -n `date +%T` >>/tmp/iostat_`date +%F` 2>& 1  && iostat -dx -k 1 1 >>/tmp/iostat_`date +%F` 2>& 1; sleep 2; done &
EOF

在while循環(huán)中使用iostat的原因是要輸出date +%T時間,不然只有數(shù)據(jù),沒有時間信息也沒有什么用

  • 使用at 命令定時執(zhí)行

at 15:14 today -f /tmp/at_task.sh

出現(xiàn)錯誤

Can't open /var/run/atd.pid to signal atd. No atd running?

重啟atd服務(wù)

service atd restart

重新開啟at定時任務(wù)

at 15:14 today -f /tmp/at_task.sh
job 2 at Wed Mar 13 1500 2019

得到如下快照信息
iostat

1535Linux 3.10.0-862.14.4.el7.x86_64 (ip-xxxxx)     03/13/2019      _x86_64_        (4 CPU)

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
vda               0.12     0.07   17.31   19.41   580.79    90.52    36.57     0.09    2.39    4.42    0.57   0.72   2.63
scd0              0.00     0.00    0.00    0.00     0.00     0.00     6.00     0.00    0.28    0.28    0.00   0.25   0.00

sar

0300 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
0302 PM     all      0.25      0.00      0.38      0.00      0.00     99.37
0304 PM     all      1.25      0.13      0.63      0.00      0.00     97.99
0306 PM     all      0.25      0.13      0.50      0.00      0.00     99.12
0308 PM     all      0.50      0.00      0.50      0.63      0.00     98.37

pidstat

0300 PM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
0302 PM  5700      9089      0.00      6.00      0.00  uxxx
0302 PM  5700      9140      0.00      6.00      0.00  uxxx
0302 PM  5700      9292      0.00     10.00      0.00  uxxx
0302 PM     0     18084      0.00      2.00      0.00  bash

kill 掉收集信息的命令

ps -ef | egrep 'iostat|sar|pidstat|while' | grep -v grep | awk '{print $2}' | xargs -l kill

但ps -ef | egrep 命令沒有獲取到while循環(huán)的pid,不kill掉該while循環(huán),就會一直對/tmp/iostat_2019-03-13寫數(shù)據(jù)-_-

通過lsof 沒有定位到打開文件的進程

lsof /tmp/iostat_2019-03-13 
[root@ip-10-186-60-117 ~]#
[root@ip-10-186-60-117 ~]#

通過lsof 可以定位到打開mysql-error.log的進程

lsof /opt/mysql/data/5690/mysql-error.log 
COMMAND   PID                USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
mysqld  12858 actiontech-universe    1w   REG  253,1     6345 20083533 /opt/mysql/data/5690/mysql-error.log
mysqld  12858 actiontech-universe    2w   REG  253,1     6345 20083533 /opt/mysql/data/5690/mysql-error.log

可見,某進程只有一只持有某文件的inode,才可以通過lsof查看文件在被那些進程使用

獲取寫文件的進程號

安裝sysemtap

yum -y install systemtap

SystemTap 是對 Linux 內(nèi)核監(jiān)控和跟蹤的工具
利用systemtap中的inodewatch.stp工具來查找寫文件的進程號

得到文件的inode

stat -c '%i' /tmp/iostat_2019-03-13 
4210339

獲取文件所在設(shè)備的major,minor

ls -al /dev/vda1
brw-rw---- 1 root disk 253, 1 Jan 30 13:57 /dev/vda1

得到寫文件的pid

stap /usr/share/systemtap/examples/io/inodewatch.stp 253 1  4210339

Checking "/lib/modules/3.10.0-862.14.4.el7.x86_64/build/.config" failed with error: No such file or directory
Incorrect version or missing kernel-devel package, use: yum install kernel-devel-3.10.0-862.14.4.el7.x86_64

根據(jù)系統(tǒng)內(nèi)核版本在kernel-devel rpm build for :ScientificLinux7網(wǎng)站上下載相應(yīng)的kernal-devel包

wget ftp://ftp.pbone.net/mirror/ftp.scientificlinux.org/linux/scientific/7.2/x86_64/updates/security/kernel-devel-3.10.0-862.14.4.el7.x86_64.rpm

rpm -ivh kernel-devel-3.10.0-862.14.4.el7.x86_64.rpm

再次執(zhí)行stap

stap /usr/share/systemtap/examples/io/inodewatch.stp 253 1 4210339
......
Missing separate debuginfos, use: debuginfo-install kernel-3.10.0-862.14.4.el7.x86_64
Pass 2: analysis failed. [man error::pass2]
Number of similar error messages suppressed: 2.

安裝debuginfo kernal

debuginfo-install kernel-3.10.0-862.14.4.el7.x86_64
  Verifying  : kernel-debuginfo-common-x86_64-3.10.0-862.14.4.el7.x86_64                        1/3 
  Verifying  : yum-plugin-auto-update-debug-info-1.1.31-50.el7.noarch                           2/3 
  Verifying  : kernel-debuginfo-3.10.0-862.14.4.el7.x86_64                                      3/3 

Installed:
  kernel-debuginfo.x86_64 0:3.10.0-862.14.4.el7
  yum-plugin-auto-update-debug-info.noarch 0:1.1.31-50.el7

Dependency Installed:
  kernel-debuginfo-common-x86_64.x86_64 0:3.10.0-862.14.4.el7

再次執(zhí)行stap

stap /usr/share/systemtap/examples/io/inodewatch.stp 253 1  4210339
ERROR: module version mismatch (#1 SMP Tue Sep 25 1452 CDT 2018 vs #1 SMP Wed Sep 26 1511 UTC 2018), release 3.10.0-862.14.4.el7.x86_64
WARNING: /usr/bin/staprun exited with status: 1

添加 -v查看詳細(xì)報錯
stap -v  /usr/share/systemtap/examples/io/inodewatch.stp 253 1  4210339
Pass 1: parsed user script and 471 library scripts using 240276virt/41896res/3368shr/38600data kb, in 300usr/20sys/320real ms.
Pass 2: analyzed script: 2 probes, 12 functions, 8 embeds, 0 globals using 399436virt/196284res/4744shr/197760data kb, in 1540usr/560sys/2106real ms.
Pass 3: using cached /root/.systemtap/cache/f5/stap_f5c0cd780e8a2cac973c9e3ee69fba0c_7030.c
Pass 4: using cached /root/.systemtap/cache/f5/stap_f5c0cd780e8a2cac973c9e3ee69fba0c_7030.ko
Pass 5: starting run.
ERROR: module version mismatch (#1 SMP Tue Sep 25 1452 CDT 2018 vs #1 SMP Wed Sep 26 1511 UTC 2018), release 3.10.0-862.14.4.el7.x86_64
WARNING: /usr/bin/staprun exited with status: 1
Pass 5: run completed in 0usr/10sys/38real ms.
Pass 5: run failed.  [man error::pass5]

修改

vim /usr/src/kernels/3.10.0-862.14.4.el7.x86_64/include/generated/compile.h

#define UTS_VERSION "#1 SMP Tue Sep 25 1452 CDT 2018"
改為
#define UTS_VERSION "#1 SMP Wed Sep 26 1511 UTC 2018"

rm -rf  /root/.systemtap/cache/f5/stap_f5c0cd780e8a2cac973c9e3ee69fba0c_7030*

再次執(zhí)行

stap /usr/share/systemtap/examples/io/inodewatch.stp 253 1 4210339

iostat(4671) vfs_write 0xfd00001/4210339
iostat(4671) vfs_write 0xfd00001/4210339
iostat(4671) vfs_write 0xfd00001/4210339
iostat(4671) vfs_write 0xfd00001/4210339
iostat(4671) vfs_write 0xfd00001/4210339
iostat(4671) vfs_write 0xfd00001/4210339
iostat(4671) vfs_write 0xfd00001/4210339
iostat(4671) vfs_write 0xfd00001/4210339
iostat(4671) vfs_write 0xfd00001/4210339
iostat(4671) vfs_write 0xfd00001/4210339
iostat(4677) vfs_write 0xfd00001/4210339
iostat(4677) vfs_write 0xfd00001/4210339
iostat(4677) vfs_write 0xfd00001/4210339
iostat(4677) vfs_write 0xfd00001/4210339
iostat(4677) vfs_write 0xfd00001/4210339
iostat(4677) vfs_write 0xfd00001/4210339
iostat(4677) vfs_write 0xfd00001/4210339
iostat(4677) vfs_write 0xfd00001/4210339
iostat(4677) vfs_write 0xfd00001/4210339
iostat(4677) vfs_write 0xfd00001/4210339
iostat(4683) vfs_write 0xfd00001/4210339
............

可見已經(jīng)得到了寫/tmp/iostat_date +%F文件的進程號,但進程號一直在打印出來,因為后臺進程iostat -dx -m 的在while循環(huán)中的,每隔sleep 2s 后就會執(zhí)行一次iostat 產(chǎn)生新的pid。
那要怎樣才能讓iostat -dx -m 停止寫/tmp/iostat_date +%F文件了?除了重啟大法好 $_$

rm -rf 也不能終止后臺的while iostat進程寫文件,刪除了文件后,while循環(huán)又會生成新的文件

rm -rf  /tmp/iostat_2019-03-1*

stat /tmp/iostat_2019-03-1*
  File: ‘/tmp/iostat_2019-03-13’
  Size: 146700    Blocks: 512        IO Block: 4096   regular file
Device: fd01h/64769dInode: 4210339     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2019-03-14 1626.211888899 +0800
Modify: 2019-03-14 1617.854019793 +0800
Change: 2019-03-14 1617.854019793 +0800

正確做法

cat>/tmp/iostat.sh<while [ 1 ];do echo -n `date +%T` >>/tmp/iostat_`date +%F` 2>& 1  && iostat -dx -m 1 1 >>/tmp/iostat_`date +%F` 2>& 1; sleep 2; done &
EOF

at  now + 1 minute  today
bash /tmp/iostat.sh

#這樣就能方便的獲取到進程號pid了
ps -ef | grep iostat
root      8593     1  0 16:16 pts/2    0000 bash /tmp/iostat.sh
審核編輯:郭婷
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11209

    瀏覽量

    208721
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    8960

    瀏覽量

    85085

原文標(biāo)題:查看 Linux 文件占用進程寫數(shù)據(jù)?

文章出處:【微信號:良許Linux,微信公眾號:良許Linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    一文搞懂Linux進程的睡眠和喚醒

    優(yōu)先級、文件描述符(記錄當(dāng)前進程打開的文件)、主要進程標(biāo)識的進程號和父進程號:
    發(fā)表于 11-04 15:15

    Linux lsof命令的基本用法

    linux 系統(tǒng)中,一切皆文件。通過文件不僅僅可以訪問常規(guī)數(shù)據(jù),還可以訪問網(wǎng)絡(luò)連接和硬件。所以 lsof 命令不僅可以查看
    的頭像 發(fā)表于 10-23 11:52 ?155次閱讀
    <b class='flag-5'>Linux</b> lsof命令的基本用法

    Linux用戶身份與進程權(quán)限詳解

    在學(xué)習(xí) Linux 系統(tǒng)權(quán)限相關(guān)的主題時,我們首先關(guān)注的基本都是文件的 ugo 權(quán)限。ugo 權(quán)限信息是文件的屬性,它指明了用戶與文件之間的關(guān)系。但是真正操作
    的頭像 發(fā)表于 10-23 11:41 ?201次閱讀
    <b class='flag-5'>Linux</b>用戶身份與<b class='flag-5'>進程</b>權(quán)限詳解

    深入探討Linux進程調(diào)度器

    Linux操作系統(tǒng)作為一個開源且廣泛應(yīng)用的操作系統(tǒng),其內(nèi)核設(shè)計包含了許多核心功能,而進程調(diào)度器(Scheduler)就是其中一個至關(guān)重要的模塊。進程調(diào)度器負(fù)責(zé)決定在任何給定的時刻哪個進程
    的頭像 發(fā)表于 08-13 13:36 ?879次閱讀
    深入探討<b class='flag-5'>Linux</b>的<b class='flag-5'>進程</b>調(diào)度器

    Linux查看IP地址的方法

    ifconfig是一個網(wǎng)絡(luò)管理工具,用于配置、控制和查詢網(wǎng)絡(luò)接口。在許多舊的Linux發(fā)行版中,ifconfig是查看和配置網(wǎng)絡(luò)接口的主要工具。
    的頭像 發(fā)表于 08-07 15:16 ?6753次閱讀
    在<b class='flag-5'>Linux</b>中<b class='flag-5'>查看</b>IP地址的方法

    linux下查詢進程占用的內(nèi)存方法有哪些?

    linux下查詢進程占用的內(nèi)存方法
    發(fā)表于 04-08 06:03

    linux怎么查看網(wǎng)卡的收光功率?

    linux怎么查看網(wǎng)卡的收光功率? 在Linux系統(tǒng)中,可以使用一些命令和工具來查看網(wǎng)卡的收光功率。本文將介紹如何使用這些命令和工具來查看
    的頭像 發(fā)表于 01-31 14:24 ?3162次閱讀

    如何查看GD32 Keil和IAR工程的map文件

    我們在設(shè)計調(diào)試程序時,往往需要知道一個函數(shù)或一個變量它在MCU中具體所在的地址以及所占用的空間大小,這時候就需要查看map文件。 那么什么是map文件呢?map
    的頭像 發(fā)表于 01-27 09:30 ?2458次閱讀
    如何<b class='flag-5'>查看</b>GD32 Keil和IAR工程的map<b class='flag-5'>文件</b>

    Linux查看IO狀態(tài)的常用命令都有哪些呢?

    介紹下Linux的3個常用I/O相關(guān)命令,解決I/O壓力過大問題時用iostat,查看磁盤的I/O狀態(tài)用iotop,查看I/O進程排名用lsof
    的頭像 發(fā)表于 01-16 09:28 ?4978次閱讀

    Linux進程、線程和協(xié)程的基礎(chǔ)概念

    進程是計算機中運行的程序的實例,它是操作系統(tǒng)中最基本的執(zhí)行單元之一。每個進程都有自己的獨立內(nèi)存空間、系統(tǒng)資源和代碼執(zhí)行流。這意味著一個進程的崩潰通常不會影響其他進程
    的頭像 發(fā)表于 12-06 09:22 ?748次閱讀

    linux查看weblogic進程

    Linux操作系統(tǒng)中,WebLogic是一種常用的Java應(yīng)用服務(wù)器,用于部署和管理企業(yè)級Java應(yīng)用程序。為了確保WebLogic服務(wù)器正常運行,有時我們需要查看WebLogic進程以了解其狀態(tài)
    的頭像 發(fā)表于 12-05 16:07 ?1745次閱讀

    linux查看端口占用情況

    摘要:本文將詳細(xì)介紹在Linux操作系統(tǒng)下如何查看端口占用情況。我們將會講解如何使用命令行工具以及圖形界面工具來查看端口占用情況,并通過實例
    的頭像 發(fā)表于 11-17 09:39 ?1414次閱讀

    linux系統(tǒng)查看物理地址

    Linux系統(tǒng)中,訪問和查看物理地址是一個非常重要的任務(wù),因為它提供了對硬件設(shè)備的直接訪問。本文將詳細(xì)介紹如何在Linux系統(tǒng)中查看物理地址,包括不同的方法和工具,以及如何解釋和使用
    的頭像 發(fā)表于 11-16 16:47 ?3275次閱讀

    linux 顯示文件夾所有文件的屬性

    Linux中,您可以使用 ls 命令來顯示文件夾所有文件的屬性。使用 ls -a 命令可以查看包括隱藏文件在內(nèi)的所有
    的頭像 發(fā)表于 11-13 16:52 ?940次閱讀

    進程文件會丟失數(shù)據(jù)

    進程文件(使用緩沖 IO)過程中,一半的時候,進程發(fā)生了崩潰,會丟失數(shù)據(jù)嗎? 答案,是不會的
    的頭像 發(fā)表于 11-13 10:57 ?616次閱讀
    <b class='flag-5'>進程</b><b class='flag-5'>寫</b><b class='flag-5'>文件</b>會丟失<b class='flag-5'>數(shù)據(jù)</b>嗎