導航:首頁 > 操作系統 > linux查看網路io

linux查看網路io

發布時間:2023-09-06 07:08:22

linux怎樣查看那個進程佔用網路io

查看linux進程佔用埠步驟如下:

  1. lsof -i 用以顯示符合條件的進程情況,lsof(list open files)是一個列出當前系統打開文件的工具。以root用戶來執行lsof -i命令,如下圖


    ⑵ 如何查看Linux下進程的IO活動狀況 00 Hey,Linux

    前段時間,幾台測試伺服器的Web應用響應速度非常慢,系統負載也比較高,> 10, 但CPU和內存卻很閑,於是懷疑是磁碟的性能瓶頸,通過vmstat和iostat看到IO的讀寫量非常大,尤其是用iostat -x 1命令可以很直觀的看到IO的使用率一直在100%。
    但究竟是什麼進程導致的高IO呢,由於每台伺服器上都有JBoss和MySQL的存在,JBoss會不停的產生很多小的數據文件和生成文本資料庫的數據,而MySQL則會不停的從Master同步新的數據。因此我們懷疑是這兩個進程導致的高IO,通過停止了JBoss和MySQL之後,IO立刻降為0%. 但我們還是不能確定誰是主因,於是尋找可以查看特定進程IO的方法。
    最後,找到了兩個方法可以查看進程IO的活動狀況。
    1. 第一個方法是通過一個python腳本來實現。
    方法是將以下內容另存為一個叫io.py的腳本中,然後直接以root身份執行腳本,就可以看到如下圖所示的信息(由於我們已經通過升級到SSD硬碟解決了MySQL的IO問題,所以不能提供關於MySQL的截圖了),其中出現次數最多,數據最大的進程,就是導致高IO的主因。不過比較遺憾的是這個腳本並不能顯示進程在每一秒的准確的IO讀寫。

    # vim io.py
    # chmod +x io.py
    # ./io.py
    #!/usr/bin/python
    # Monitoring per-process disk I/O activity
    # written by http://www.vpsee.com

    import sys, os, time, signal, re

    class DiskIO:
    def __init__(self, pname=None, pid=None, reads=0, writes=0):
    self.pname = pname
    self.pid = pid
    self.reads = 0
    self.writes = 0

    def main():
    argc = len(sys.argv)
    if argc != 1:
    print "usage: ./iotop"
    sys.exit(0)

    if os.getuid() != 0:
    print "must be run as root"
    sys.exit(0)

    signal.signal(signal.SIGINT, signal_handler)
    os.system('echo 1 > /proc/sys/vm/block_mp')
    print "TASK PID READ WRITE"
    while True:
    os.system('dmesg -c > /tmp/diskio.log')
    l = []
    f = open('/tmp/diskio.log', 'r')
    line = f.readline()
    while line:
    m = re.match(\
    '^(\S+)\((\d+)\): (READ|WRITE) block (\d+) on (\S+)', line)
    if m != None:
    if not l:
    l.append(DiskIO(m.group(1), m.group(2)))
    line = f.readline()
    continue
    found = False
    for item in l:
    if item.pid == m.group(2):
    found = True
    if m.group(3) == "READ":
    item.reads = item.reads + 1
    elif m.group(3) == "WRITE":
    item.writes = item.writes + 1
    if not found:
    l.append(DiskIO(m.group(1), m.group(2)))
    line = f.readline()
    time.sleep(1)
    for item in l:
    print "%-10s %10s %10d %10d" % \
    (item.pname, item.pid, item.reads, item.writes)

    def signal_handler(signal, frame):
    os.system('echo 0 > /proc/sys/vm/block_mp')
    sys.exit(0)

    if __name__=="__main__":
    main()

    2. 另一個方法是將Linux的內核升級到 >=2.6.20,然後安裝一個iotop軟體來實現。
    不過這種改動並不適用於生產環境,因為在RHEL5.6和5.7上,內核都在 2.6.20以下。但是它所顯示的結果是非常准確的,所以對於新上線的機器以及測試環境,非常值得一試,具體方法如下:

    下載和升級新內核(>=2.6.20),編譯時打開 TASK_DELAY_ACCT 和 TASK_IO_ACCOUNTING 選項。
    解壓內核後進入配置界面:
    # wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.39.tar.gz
    # tar jxvf linux-2.6.39.tar.gz
    # mv linux-2.6.39 /usr/src/
    # cd /usr/src/linux-2.6.39
    # make oldconfig //使用make oldconfig可以繼承老的kernel的配置,為自己的配置省去很多麻煩。
    # make menuconfig
    把General setup - Enable per-task storage I/O accounting這個選項選上。

    # vim .config
    將#CONFIG_SYSFS_DEPRECATED_V2 is not set的注釋去掉的,將其改為y,即修改為CONFIG_SYSFS_DEPRECATED_V2=y。
    保存內核後編譯內核:
    # make
    # make moles
    # make moles_install
    # make install
    修改默認以新的內核啟動:
    # vi /boot/grub/grub.conf
    default=0
    將新的內核配置文件復制到/boot目錄:
    # cp /usr/src/linux-2.6.39/.config /boot/config-2.6.39
    重啟伺服器:
    # reboot
    # uname –r
    2.6.39
    重啟完成後確認內核版本是否正確。
    源碼安裝iotop所需的Python 2.7.2(>= 2.5):
    # wget http://www.python.org/ftp/python/2.7.2/Python-2.7.2.tgz
    # tar xzvf Python-2.7.2.tgz
    # cd Python-2.7.2
    # ./configure
    # make; make install
    下載並安裝iotop:
    # wget http://guichaz.free.fr/iotop/files/iotop-0.4.4.tar.bz2
    # tar -xjvf iotop-0.4.4.tar.bz2
    # cd iotop-0.4.4
    # python setup.py build
    # python setup.py install
    然後就可以使用iotop看到如下圖所示的信息:

    ⑶ linux查看磁碟io的幾種方法

    linux查看磁碟io的幾種方法

    怎樣才能快速的定位到並發高是由於磁碟io開銷大呢?可以通過三種方式:

    第一種:用 top 命令 中的cpu 信息觀察

    Top可以看到的cpu信息有:

    Tasks: 29 total, 1 running, 28 sleeping, 0 stopped, 0 zombie

    Cpu(s): 0.3% us, 1.0% sy, 0.0% ni, 98.7% id, 0.0% wa, 0.0% hi, 0.0% si

    具體的解釋如下:

    Tasks: 29 total 進程總數

    1 running 正在運行的進程數

    28 sleeping 睡眠的進程數

    0 stopped 停止的進程數

    0 zombie 僵屍進程數

    Cpu(s):

    0.3% us 用戶空間佔用CPU百分比

    1.0% sy 內核空間佔用CPU百分比

    0.0% ni 用戶進程空間內改變過優先順序的進程佔用CPU百分比

    98.7% id 空閑CPU百分比

    0.0% wa 等待輸入輸出的CPU時間百分比

    0.0% hi

    0.0% si

    0.0% wa 的百分比可以大致的體現出當前的磁碟io請求是否頻繁。如果 wa的數量比較大,說明等待輸入輸出的的io比較多。

    第二種:用vmstat

    vmstat 命令報告關於線程、虛擬內存、磁碟、陷阱和 CPU 活動的統計信息。由 vmstat 命令生成的報告可以用於平衡系統負載活動。系統范圍內的這些統計信息(所有的處理器中)都計算出以百分比表示的平均值,或者計算其總和。

    輸入命令:

    vmstat 2 5

    如果發現等待的進程和處在非中斷睡眠狀態的進程數非常多,並且發送到塊設備的塊數和從塊設備接收到的塊數非常大,那就說明磁碟io比較多。

    vmstat參數解釋:

    Procs

    r: 等待運行的進程數 b: 處在非中斷睡眠狀態的進程數 w: 被交換出去的可運行的進程數。此數由 linux 計算得出,但 linux 並不耗盡交換空間

    Memory

    swpd: 虛擬內存使用情況,單位:KB

    free: 空閑的內存,單位KB

    buff: 被用來做為緩存的內存數,單位:KB

    Swap

    si: 從磁碟交換到內存的交換頁數量,單位:KB/秒

    so: 從內存交換到磁碟的交換頁數量,單位:KB/秒

    IO

    bi: 發送到塊設備的塊數,單位:塊/秒

    bo: 從塊設備接收到的塊數,單位:塊/秒

    System

    in: 每秒的中斷數,包括時鍾中斷

    cs: 每秒的環境(上下文)切換次數

    CPU

    按 CPU 的總使用百分比來顯示

    us: CPU 使用時間

    sy: CPU 系統使用時間

    id: 閑置時間

    准測

    更多vmstat使用信息

    第二種:用iostat

    安裝:

    Iostat 是 sysstat 工具集的一個工具,需要安裝。

    Centos的安裝方式是:

    yum install sysstat

    Ubuntu的安裝方式是:

    aptitude install sysstat

    使用:

    iostat -dx 顯示磁碟擴展信息

    root@fileapp:~# iostat -dx

    r/s 和 w/s 分別是每秒的讀操作和寫操作,而rKB/s 和wKB/s 列以每秒千位元組為單位顯示了讀和寫的數據量

    如果這兩對數據值都很高的話說明磁碟io操作是很頻繁。

    +++++++++++++++++++++++++++++++++++++

    linux wa%過高,iostat查看io狀況

    1, 安裝  iostat  

    yum install sysstat

    之後就可以使用 iostat 命令了,

    2,入門使用

    iostat -d -k 2

    參數 -d 表示,顯示設備(磁碟)使用狀態;-k某些使用block為單位的列強制使用Kilobytes為單位;2表示,數據顯示每隔2秒刷新一次。

    tps:該設備每秒的傳輸次數(Indicate the number of transfers per second that were issued to the device.)。"一次傳輸"意思是"一次I/O請求"。多個邏輯請求可能會被合並為"一次I/O請求"。"一次傳輸"請求的大小是未知的。kB_read/s:每秒從設備(drive expressed)讀取的數據量;

    kB_wrtn/s:每秒向設備(drive expressed)寫入的數據量;

    kB_read:讀取的總數據量;kB_wrtn:寫入的總數量數據量;這些單位都為Kilobytes。

    指定監控的設備名稱為sda,該命令的輸出結果和上面命令完全相同。

    iostat -d sda 2

    默認監控所有的硬碟設備,現在指定只監控sda。 

    3, -x 參數

    iostat還有一個比較常用的選項 -x ,該選項將用於顯示和io相關的擴展數據。

    iostat -d -x -k 1 10

    輸出信息的含義



    4, 常見用法

    iostat -d -k 1 10        #查看TPS和吞吐量信息(磁碟讀寫速度單位為KB)

    iostat -d -m 2            #查看TPS和吞吐量信息(磁碟讀寫速度單位為MB)

    iostat -d -x -k 1 10      #查看設備使用率(%util)、響應時間(await) iostat -c 1 10 #查看cpu狀態

    5, 實例分析

    iostat -d -k 1 | grep vda

    Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn

    sda10            60.72        18.95        71.53  395637647 1493241908

    sda10          299.02      4266.67      129.41      4352        132

    sda10          483.84      4589.90      4117.17      4544      4076

    sda10          218.00      3360.00      100.00      3360        100

    sda10          546.00      8784.00      124.00      8784        124

    sda10          827.00    13232.00      136.00      13232        136

    上面看到,磁碟每秒傳輸次數平均約400;每秒磁碟讀取約5MB,寫入約1MB。

    iostat -d -x -k 1

    Device:    rrqm/s wrqm/s  r/s  w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz avgqu-sz  await  svctm  %util

    sda          1.56  28.31  7.84 31.50  43.65    3.16    21.82    1.58    1.19    0.03    0.80  2.61  10.29

    sda          1.98  24.75 419.80  6.93 13465.35  253.47  6732.67  126.73    32.15    2.00    4.70  2.00  85.25

    sda          3.06  41.84 444.90 54.08 14204.08 2048.98  7102.04  1024.49    32.57    2.10    4.21  1.85  92.24

    可以看到磁碟的平均響應時間<5ms,磁碟使用率>80。磁碟響應正常,但是已經很繁忙了。

    可以看到磁碟的平均響應時間<5ms,磁碟使用率>90。磁碟響應正常,但是已經很繁忙了。

    await:  每一個IO請求的處理的平均時間(單位是微秒毫秒)。這里可以理解為IO的響應時間,一般地系統IO響應時間應該低於5ms,如果大於10ms就比較大了

    svctm    表示平均每次設備I/O操作的服務時間(以毫秒為單位)。如果svctm的值與await很接近,表示幾乎沒有I/O等待,磁碟性能很好,

    如果await的值遠高於svctm的值,則表示I/O隊列等待太長,  系統上運行的應用程序將變慢。

    %util: 在統計時間內所有處理IO時間,除以總共統計時間

    所以該參數暗示了設備的繁忙程度

    。一般地,如果該參數是100%表示設備已經接近滿負荷運行了(當然如果是多磁碟,即使%util是100%,因為磁碟的並發能力,所以磁碟使用未必就到了瓶頸)。

    也可以使用下面的命令,同時顯示cpu和磁碟的使用情況

    等待時間超過5ms, 磁碟io有問題

    ⑷ 如何查看Linux下進程的IO活動狀況 00 Hey,Linux

    您好,很高興為您解答。伺服器cpu使用率不高,load比較高,所以要查看一下IO。硬碟IO可以通過命令vmstat或iostat獲得(也可以用yum安裝dstat獲得),網路IO可以用iftop命令獲取。但是不知道那個進程使用硬碟IO比較高,通過查找沒有找到相關命令,只好自己寫個腳本進行統計處理。本腳本在CentOS6下(kernel2.6以上)python2.6測試通過。直接運行腳本,默認情況下收集3秒鍾數據,顯示讀寫最高的前三個進程。如用參數可以使用命令「pythonfhip.py453」,第一個數位每次收集讀寫數據的間隔秒數,第二個數是列印出讀寫最多的n個進程,第三個為運行腳本的次數。因為參數部分寫的比較簡單那,所以用參數必須3個全寫。。#!/bin/python#-*-coding:utf-8-*-#Filename:ind_high_io_process#Revision:1.0#Date:2013-3-8#Author:simonzhang#web:#######sys_proc_path='/proc/'re_find_process_number='^\d+$'#####通過/proc/$pid/io獲取讀寫信息####defcollect_info():_tmp={}re_find_process_dir=re.compile(re_find_process_number)foriinos.listdir(sys_proc_path):ifre_find_process_dir.search(i):#獲得進程名process_name=open("%s%s/stat"%(sys_proc_path,i),"rb").read().split("")[1]#讀取io信息rw_io=open("%s%s/io"%(sys_proc_path,i),"rb").readlines()for_infoinrw_io:cut_info=strip(_info).split(':')ifstrip(cut_info[0])=="read_bytes":read_io=int(strip(cut_info[1]))ifstrip(cut_info[0])=="write_bytes":write_io=int(strip(cut_info[1]))_tmp[i]={"name":process_name,"read_bytes":read_io,"write_bytes":write_io}return_tmpdefmain(_sleep_time,_list_num):_sort_read_dict={}_sort_write_dict={}#獲取系統讀寫數據process_info_list_frist=collect_info()time.sleep(_sleep_time)process_info_list_second=collect_info()#將讀數據和寫數據進行分組,寫入兩個字典中forloopinprocess_info_list_second.keys():second_read_v=process_info_list_second[loop]["read_bytes"]second_write_v=process_info_list_second[loop]["write_bytes"]try:frist_read_v=process_info_list_frist[loop]["read_bytes"]except:frist_read_v=0try:frist_write_v=process_info_list_frist[loop]["write_bytes"]except:frist_write_v=0#計算第二次獲得數據域第一次獲得數據的差_sort_read_dict[loop]=second_read_v-frist_read_v_sort_write_dict[loop]=second_write_v-frist_write_v#將讀寫數據進行排序sort_read_dict=sorted(_sort_read_dict.items(),key=lambda_sort_read_dict:_sort_read_dict[1],reverse=True)sort_write_dict=sorted(_sort_write_dict.items(),key=lambda_sort_write_dict:_sort_write_dict[1],reverse=True)#列印統計結果print"pidprocessread(bytes)pidprocesswrite(btyes)"for_numinrange(_list_num):read_pid=sort_read_dict[_num][0]write_pid=sort_write_dict[_num][0]res="%s"%read_pidres+=""*(8-len(read_pid))+process_info_list_second[read_pid]["name"]res+=""*(12-len(process_info_list_second[read_pid]["name"]))+"%s"%sort_read_dict[_num][1]res+=""*(12-len("%s"%sort_read_dict[_num][1]))+write_pidres+=""*(8-len(write_pid))+process_info_list_second[write_pid]["name"]res+=""*(12-len("%s"%process_info_list_second[write_pid]["name"]))+"%s"%sort_write_dict[_num][1]printresprint"\n"*1if__name__=='__main__':try:_sleep_time=sys.argv[1]except:_sleep_time=3try:_num=sys.argv[2]except:_num=3try:loop=sys.argv[3]except:loop=1foriinrange(int(loop)):main(int(_sleep_time),int(_num))如若滿意,請點擊【採納答案】,如若還有問題,請點擊【追問】希望我的回答對您有所幫助,望採納!~O(∩_∩)O~

    ⑸ linux查看網路io使用率

    sar -n DEV

    不帶其他參數 看當天的網路IO 預設取樣時間為1秒,間隔為10分鍾
    加 -f /var/log/sa/saxx可察看某日的歷史,xx為當月或上月的日期(day of the month)前提是改文件存在

    察看即時IO用sar -n DEV 1 999 表示取樣間隔為1秒,取樣999次

    具體欄位的含義我就不醉贅述了

    ⑹ Linux如何查看與測試磁碟IO性能

    top命令的其他參數代表的含義詳見top命令詳解

    sar 命令是分析系統瓶頸的神器,可以用來查看 CPU 、內存、磁碟、網路等性能。

    sar 命令查看當前磁碟性能的命令為:

閱讀全文

與linux查看網路io相關的資料

熱點內容
行偏移演算法 瀏覽:240
什麼app也能讓wifi增強 瀏覽:178
雙分錄核演算法反映什麼 瀏覽:210
ubuntuphpaptget 瀏覽:256
安卓手機快充需要什麼數據線 瀏覽:795
程序中存在未轉換未編譯部分 瀏覽:323
編譯匯編鏈接優化 瀏覽:83
程序員打字和作家哪個打字快 瀏覽:579
安卓手機怎麼用cad命令行 瀏覽:385
2200工程機接收命令瞬間消失 瀏覽:255
壓縮機工藝管是多大的 瀏覽:314
安卓刷什麼系統穩定 瀏覽:37
程序員寫炫酷代碼 瀏覽:933
大話存儲pdf 瀏覽:526
中銘機器人怎麼編程 瀏覽:812
把字母變為數字的加密法 瀏覽:523
噬血狂襲第三季哪個app能看 瀏覽:423
江蘇螺桿壓縮機 瀏覽:982
android底部彈出對話框 瀏覽:503
怎麼查伺服器同行fc號 瀏覽:1001