【免費註冊】 【會員登入】 【個人資料】 【會員列表】 【論壇幫助】 【論壇搜尋】 【登出論壇】

∮Ω奧米加空間∮
∮Ω奧米加空間∮»技術文件區»Linux 筆記

訂覽該主題更新消息 | 將該主題推薦給朋友 發表新主題 發起投票  回覆
作者 主題     分頁:[ 1 2 3 4 5 ]
dc
管理員



性別:男
來自:瓦肯星
發表總數:9197
註冊時間:2002-05-07 16:32
(第 41 篇) 【轉貼】NetHogs 实时监控进程/程序网络使用情况



資料來源:OMCloud

NetHogs是一个小的开源的流量监控工具。说起流量监控工具其实非常多,如:iftop、vnstat,这些都是统计和监控网卡的流量。而NetHogs的特点在于可以实时的监控每个进程的带宽占用情况,当我们的服务器的带宽大量占用或者其它的一些网络异常,我们可以通过NetHogs来查看是哪个进程或程序异常导致带宽被占用,从而解决带宽问题。



一、NetHogs安装:

1.推荐使用安装方式:

Ubuntu/Debian下安装:

  #apt-get install nethogs

ReadHat/CentOS下安装:

  #yum install nethogs

以centos示例:



2.自行下载相关包进行编译安装:

  yum -y install gcc-g++ libpcap libpcap-devel

  wget http://jaist.dl.sourceforge.net/project/nethogs/nethogs/0.8/nethogs-0.8.0.tar.gz  -p /usr/local/src

  cd /usr/local/src

  tar -xvf nethogs-0.80.tar.gz

  cd nethogs

  make && make install

二、使用:

nethogs [-h] [-V] [-d] [-v] [-t] [-c] [-p] [-s] [device(s)]



具体使用示例:

直接使用NetHogs(默认检测设备eth0的带宽,并且默认是每秒刷新一次)

#  nethogs  



使用-d参数设置5秒刷新一次

# nethogs -d 5

指定监控的网卡设备的带宽

# nethogs eth1

# nethogs eth0 eth1

三、具体参数说明:

  (1)参数和用法:

-h :显示可用命令的用法

-V :打印版本信息

-d :延迟刷新率(延迟刷新时间),单位是秒,默认为每秒刷新一次

-v :选择视图模式

-p :混合模式下嗅探(不推荐)

-t :跟踪模式

-c :限制刷新的次数 (好像只有version 0.8.1-SNAPSHOT及以后版本才有)

-s :按发送的流量排序 (好像只有version 0.8.1-SNAPSHOT及以后版本才有)

  device(s):监听的设备,默认是eth0(网卡设备名)



  (2)NetHogs交互控制:(使用一下按键操作)

  m: 按m键,切换单位或显示占用速度;切换顺序是(KB/sec,KB,B,MB)

  r : 按 r 键,按接收流量排序

  s : 按 s 键 ,按发送流量排序

  q : 按 q 键退出

四、NetHogs的扩展使用

  1.将nethogs监控进程的信息输出重定向到日志文件中

  #nethogs -c 1 -t > test.log (好像0.8.0的版本不支持)



注意:如果不加-t参数,重定向到文件中的内容可能是乱码。。。




本帖由dc最後編輯於2018-06-15 17:24

Your mind to my mind,

your thought to my thought
發表時間:2018-06-15 17:19
dc的個人資料 傳送郵件給dc dc的個人首頁 dc發表的所有文章 送出悄悄話給dc IP:203.*.*.* 編輯  引言回覆 
dc
管理員



性別:男
來自:瓦肯星
發表總數:9197
註冊時間:2002-05-07 16:32
(第 42 篇)

資料來源:Tsung's Blog

Linux: umount 時 出現 "Device is busy" 的解法

當任何目錄有 mount, 然後有程式 使用/掛 在那個目錄上的話, 就沒有辦法 umount 掉, 於 umount 時會出現 Device is busy 的訊息.

要怎麼找出是哪個程式掛在那個目錄上? 然後去把那個程式砍掉呢?


使用 fuser 的指令
那要怎麼找出是哪個程式掛在那個目錄上, 可以使用 fuser - identify processes using files or sockets

假設現在 mount 起來的目錄是 /media/share

查詢: fuser -m /media/share
顯示: /media/share: 25023c
就代表是 process 25023(pid) 有使用到此目錄, 後面 c 代表的意思可參考下述:

c: current directory.
e: executable being run.
f: open file. f is omitted in default display mode.
F: open file for writing. F is omitted in default display mode.
r: root directory.
m: mmap'ed file or shared library.
要把這個資源釋放的話, 可以有下述做法:

kill -9 25023 # ps aux | grep 25023 應該就會看到它
fuser -m -v -i -k /media/share # 會問你是不是要把 25023 這個 kill 掉, 選 y 就會 kill 掉
訊息如下:
              USER      PID   ACCESS COMMAND
/meida/share: root      25023 ..c..  bash
Kill process 25023 ? (y/N) y

相關網頁
解决 umount時出現的 “Device is busy”



例如我們掛載的目錄是 /mydb 想寫在 sh 裡讓他自動按下 y 強制移除的話可以如下

echo y|fuser -m -v -i -k /mydb
umount /mydb


但還是建議寫在 sh 裡的指令不要寫成相同的目錄來掛載,盡量分開比較好~
以免 umount 失敗要 mount 的資料夾不相同。

舉例
mount -t nfs 192.168.1.3:/test1 /mnt/nfs
cp ${TIME}.gz /mnt/nfs
umount /mnt/nfs
mount -t nfs 192.168.1.3:/test2 /mnt/nfs
cp ${TIME}.gz /mnt/nfs
/usr/bin/find /mnt/nfs/ -name "*.gz" -mtime +7 -exec rm -f {} \;
umount /mnt/nfs

test1 umount 失敗的話 接下來 mount test2 會失敗,然後就在 test1 裡執行了 rm 的指令,本來要刪 test2 裡的資料變成刪除了 test1 裡的資料。
如果在 test1 umount /mnt/nfs 前面加強制移除 echo y|fuser -m -v -i -k /mnt/nfs
可以解決這個問題~但還是建議分開如下

mount -t nfs 192.168.1.3:/test1 /mnt/test1
cp ${TIME}.gz /mnt/test1
umount /mnt/test1
mount -t nfs 192.168.1.3:/test2 /mnt/test2
cp ${TIME}.gz /mnt/test2
/usr/bin/find /mnt/test2/ -name "*.gz" -mtime +7 -exec rm -f {} \;
umount /mnt/test2

提供大家參考~






Your mind to my mind,

your thought to my thought
發表時間:2019-07-17 10:56
dc的個人資料 傳送郵件給dc dc的個人首頁 dc發表的所有文章 送出悄悄話給dc IP:203.*.*.* 編輯  引言回覆 
dc
管理員



性別:男
來自:瓦肯星
發表總數:9197
註冊時間:2002-05-07 16:32
(第 43 篇)

資料來源:Aim Wang

bash 用變數內容當變數名稱取值

在很多情況下我們會遇到無法預知個數的變數群,而且變數名稱最後是採用數字來當作區別,因為是未知個數,所以要使用一個動態迴圈來處理,如何取得個別數值來處理變得很重要。參考下面的範例:
DNS1="8.8.8.8"
DNS2="8.8.4.4"
DNS3="0.0.0.0"
DNS4="139.175.150.20"
DNS5="168.95.1.1"
DNS_CNT=5
RESOLV_CONF="/etc/resolv.conf"
i=1
echo "; generated by my script" > $RESOLV_CONF
while [ $i -le $DNS_CNT ]
do
    eval "DNS_ADDR=\$DNS$i"
    if [ "0.0.0.0" != "$DNS_ADDR" ]; then
        echo "nameserver $DNS_ADDR" >> $RESOLV_CONF
    fi
done
最主要看 do 迴圈的第一行,eval "DNS_ADDR=\$DNS$i" ,因為 eval 會去執行它後面帶出來的那一行,而 \$ 會是 $ 符號,$i 則是目前 i 的值,因此當 i=1 時 "DNS_ADDR=\$DNS$i" 就會是 DNS_ADDR=$DNS1,透過 eval 執行,就會把 DNS1 的值帶給 DNS_ADDR 以利後面處理。






Your mind to my mind,

your thought to my thought
發表時間:2020-10-10 09:49
dc的個人資料 傳送郵件給dc dc的個人首頁 dc發表的所有文章 送出悄悄話給dc IP:118.*.*.* 編輯  引言回覆 
所有時間均為GMT+8, 現在是2020-10-24 09:01     分頁:[ 1 2 3 4 5 ]
訂覽該主題更新消息 | 將該主題推薦給朋友 發表新主題 發起投票  回覆

快速回覆
主題 ( 回覆文章可以不輸入標題 )
URLs自動分析
有回覆時郵件通知
禁用表情符號
使用簽名

<聯絡我們 - OMEGA - 控制面板>

Powered by Centaur & Joksky & DC, ver 2003.08.14
Copyright ©2002-2008 PHPY.COM


頁面生成時間:0.019758939743042