怎樣DEBUG 程序IO消耗大的問題

2021-06-09 04:39:39 字數 679 閱讀 2576

1、問題描述: 發現cgi程式的磁碟io突然出現峰值上公升;

2、判斷: 程式突然出現大量的core dump或者某業務異常出發大量的io寫操作;

3、分析方法:

a).使用top按照cpu排序發現cpu使用率很高的程序,一般io使用率高的程序cpu的消耗也會大幅增加,通過cpu使用率基本能夠定位到問題程序;

b).通過iostat檢視哪個分割槽有大量的寫磁碟操作;

c).通過block_dump引數查詢占用io最多的程序:

/etc/init.d/sysylog stop 關閉syslog

echo 1 > /proc/sys/vm/block_dump, 等待幾秒鐘後,核心會將io資訊輸出到io日誌中;

dmsg | egrep "read|write|dirtied" | awk '' | sort | uniq -c | sort -rn | head 查詢單位時間io操作最高的程序的pid;

分析完成後關閉block_dump; echo 0 > /etc/init.d/vm/block_dump;   /etc/init.d/syslog start

4、檢視程序讀寫的檔案資訊; 通過 /proc/$pid/fd 下的檔案描述符來檢視, 同時還可以通過這個方式檢視伺服器是否存在記憶體洩漏;

5、通過上述方法基本能夠確認是由於哪個程序寫哪個檔案造成的磁碟io消耗過高;

檢視那個程序消耗IO較大

如果是高版本我們可以使用iotop但是如果版本較低就沒這麼幸運了,當然我們可以使用如下命令程序檢視 要先停掉syslog etc init.d syslog stop echo 1 proc sys vm block dump dmesg egrep read write dirtied egrep...

檢視程序所消耗的記憶體

在舊版的作業系統中,可以在 windows 任務管理器中檢視每個程序消耗記憶體的情況。windows server 2008及後續產品有一些區別。預設情況下,windows 任務管理器僅顯示 記憶體 專用工作集 列。記憶體 專用工作集 是這個程序獨佔的物理記憶體。每個程序都有 閒 和 忙 的時候,忙...

檢視程序所消耗的記憶體

在舊版的作業系統中,可以在 windows 任務管理器中檢視每個程序消耗記憶體的情況。windows server 2008及後續產品有一些區別。預設情況下,windows 任務管理器僅顯示 記憶體 專用工作集 列。記憶體 專用工作集 是這個程序獨佔的物理記憶體。每個程序都有 閒 和 忙 的時候,忙...