須要肯定在線服務的網卡下 ,不然服務器斷網。java
(1)ifup eth1 激活eth1網卡python
(2)ifdown eth1 關閉eth1網卡linux
(3)徹底禁用網卡c++
vi /etc/sysconfig/network-scripts/ifcfg-eth1git
onboot=NOgithub
(1)可能查看某個進程的帶寬佔用須要明確知道PID、進程名字、發送速度、接收速度。服務器
(2)在Linux原生的軟件中沒有,只能外裝,最符合以上的狀況就只有nethogs。網絡
(3)nethogs能夠指定網卡,可是不能指定PID,這就是一個缺陷。socket
sudo nethogs
#Ubuntu: sudo apt-get install nethogs #CentOS: sudo yum install nethogs
《1》、nethogs介紹tcp
分享一個linux 下檢測系統進程佔用帶寬狀況的檢查。來自github上的開源工具。
它不依賴內核中的模塊。當咱們的服務器網絡異常時,能夠經過運行nethogs程序來檢測是那個程序佔用了大量帶寬。節省了查找時間。
《2》、安裝方法
1.在epel 源中能夠直接yum 安裝
yum install libpcap nethogs -y
2.源碼方式安裝
2.1 安裝c++ 環境
[root@SaltMaster ~]# yum install gcc-c++ libpcap-devel.x86_64 libpcap.x86_64 ncurses*
2.2 下載編譯好的二進制文件
[root@SaltMaster ~]# git clone https://github.com/raboof/nethogs Initialized empty Git repository in /root/nethogs/.git/ remote: Counting objects: 1193, done. remote: Total 1193 (delta 0), reused 0 (delta 0), pack-reused 1193 Receiving objects: 100% (1193/1193), 1.22 MiB | 29 KiB/s, done. Resolving deltas: 100% (789/789), done.
2.3 編譯並安裝
[root@SaltMaster ~]# cd nethogs/ [root@SaltMaster nethogs]# make [root@SaltMaster nethogs]# make install
完成上面步驟就算安裝完成了。若是編譯失敗的話,大部分是缺乏編譯環境。
3.使用方法
3.1 直接運行nethogs 就能夠查看當前佔用帶寬的進程
3.2 咱們來測試 找出eth0 上佔用大量帶寬的程序
nethogs 網卡設備
咱們檢測 eth0,運行一下命令
[root@SaltMaster ~]# nethogs eth0
圖中第一行就是測試中的流量記錄,表示192.168.40.250這臺客戶端去訪問個人80 端口所佔用的帶寬。
在PID 那一列,可使用 lsof -p pid 查看進程測試。
或者用lsof -i :端口號,來查看是哪些進程在佔用。如查看80端口 lsof -i :80
lsof -i:端口號
用於查看某一端口的佔用狀況,好比查看8000端口使用狀況,
# lsof -i:8000 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME lwfs 22065 root 6u IPv4 4395053 0t0 TCP *:irdmi (LISTEN)
9009端口被java服務佔用,8000端口已經被輕量級文件系統轉發服務lwfs佔用。
使用netstat工具,查看端口占用狀況和當前鏈接數。
netstat -tunlp |grep 端口號,用於查看指定的端口號的進程狀況
說明一下幾個參數的含義:
-t (tcp) 僅顯示tcp相關選項 -u (udp)僅顯示udp相關選項 -n 拒絕顯示別名,能顯示數字的所有轉化爲數字 -l 僅列出在Listen(監聽)的服務狀態 -p 顯示創建相關連接的程序名
使用python腳本監測端口占用,該程序能夠監測指定IP的端口是否被佔用。
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 4 import socket, time, thread 5 socket.setdefaulttimeout(3) #設置默認超時時間 6 7 def socket_port(ip, port): 8 """ 9 輸入IP和端口號,掃描判斷端口是否佔用 10 """ 11 try: 12 if port >=65535: 13 print u'端口掃描結束' 14 s=socket.socket(socket.AF_INET, socket.SOCK_STREAM) 15 result=s.connect_ex((ip, port)) 16 if result==0: 17 lock.acquire() 18 print ip,u':',port,u'端口已佔用' 19 lock.release() 20 except: 21 print u'端口掃描異常' 22 23 def ip_scan(ip): 24 """ 25 輸入IP,掃描IP的0-65534端口狀況 26 """ 27 try: 28 print u'開始掃描 %s' % ip 29 start_time=time.time() 30 for i in range(0,65534): 31 thread.start_new_thread(socket_port,(ip, int(i))) 32 print u'掃描端口完成,總共用時:%.2f' %(time.time()-start_time) 33 # raw_input("Press Enter to Exit") 34 except: 35 print u'掃描ip出錯' 36 37 if __name__=='__main__': 38 url=raw_input('Input the ip you want to scan: ') 39 lock=thread.allocate_lock() 40 ip_scan(url)
該程序執行結果以下:
# python scan_port.py Input the ip you want to scan: 20.0.208.112 開始掃描 20.0.208.112 20.0.208.112 : 111 端口已佔用 20.0.208.112 : 22 端口已佔用 20.0.208.112 : 8000 端口已佔用 20.0.208.112 : 15996 端口已佔用 20.0.208.112 : 41734 端口已佔用 掃描端口完成,總共用時:9.38