發新話題

查看Apache 連接數

查看Apache 連接數

因每個訪問者都會在服務器上打開一個進程作提供服務
查看進程數量,判斷連接人數
ps -ef|grep httpd|wc -l
pstree |grep httpd

查看httpd進程數(即prefork模式下Apache能夠處理的並發請求數):
Linux 命令:
    ps -ef | grep httpd | wc -l

查看Apache的並發請求數及其TCP連接狀態:
Linux命令:
    netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

返回結果示例:
  LAST_ACK 5
  SYN_RECV 30
  ESTABLISHED 1597
  FIN_WAIT1 51
  FIN_WAIT2 504
  TIME_WAIT 1057

說明:  
   SYN_RECV表示正在等待處理的請求數;
   ESTABLISHED表示正常數據傳輸狀態;
   TIME_WAIT表示處理完畢,等待超時結束的請求數。

服務器上的一些統計數據:
1)統計80端口連接數
netstat -nat|grep -i "80"|wc -l
1
2)統計httpd協議連接數
ps -ef|grep httpd|wc -l
1
3)、統計已連接上的,狀態為「established'
netstat -na|grep ESTABLISHED|wc -l
2
4)、查出哪個IP地址連接最多,將其封了:
複製內容到剪貼板
代碼:
netstat -na|grep ESTABLISHED|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -r +0n
netstat -na|grep SYN|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -r +0n
linux做nat 服務器,我想查看穿過服務器的當前連接數
是用 more  /proc/net/ip_conntrack |wc -l 統計行數 ???
還是用  more  /proc/net/ip_conntrack |grep ESTABLISHED|wc -l  ??
用哪一個命令更準確一些??
cat /proc/slabinfo  | grep ip_conn | grep -v ip_conntrack_expect | awk '{print $2}'

TOP

Linux服務器如何統計連接數查看外部IP

服務器上的一些統計數據:

1)統計80端口連接數

netstat -nat|grep -i "80"|wc -l

2)統計httpd協議連接數

ps -ef|grep httpd|wc -l

3)、統計已連接上的,狀態為「established'

netstat -na|grep ESTABLISHED|wc -l

4)、查出哪個IP地址連接最多,將其封了.
netstat -na|grep ESTABLISHED|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -r +0n

netstat -na|grep SYN|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -r +0n

TOP

netstat

如果你覺得你的某個網路服務明明就啟動了,但是就是無法造成連線的話,那麼應該怎麼辦? 首先你應該要查詢一下自己的網路介面所監聽的埠口 (port) 來看看是否真的有啟動, 因為有時候螢幕上面顯示的 [OK] 並不一定是 OK 啊! ^_^

[root@linux ~]# netstat -[rn]       <==與路由有關的參數
[root@linux ~]# netstat -[antulpc]  <==與網路介面有關的參數
參數:
與路由 (route) 有關的參數說明:
-r  :列出路由表(route table),功能如同 route 這個指令;
-n  :不使用主機名稱與服務名稱,使用 IP 與 port number ,如同 route -n
與網路介面有關的參數:
-a  :列出所有的連線狀態,包括 tcp/udp/unix socket 等;
-t  :僅列出 TCP 封包的連線;
-u  :僅列出 UDP 封包的連線;
-l  :僅列出有在 Listen (監聽) 的服務之網路狀態;
-p  :列出 PID 與 Program 的檔名;
-c  :可以設定幾秒鐘後自動更新一次,例如 -c 5 每五秒更新一次網路狀態的顯示;

範例一:列出目前的路由表狀態,且以 IP 及 port number 顯示:
[root@linux ~]# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.10.0    0.0.0.0         255.255.255.0   U         0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0
0.0.0.0         192.168.10.30   0.0.0.0         UG        0 0          0 eth0
# 其實這個參數就跟 route -n 一模一樣,對吧!這不是 netstat 的主要功能啦!

範例二:列出目前的所有網路連線狀態,使用 IP 與 port number
[root@linux ~]# netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State
tcp        0      0 0.0.0.0:25                  0.0.0.0:*                   LISTEN
tcp        0      0 :::22                       :::*                        LISTEN
tcp        0      0 ::ffff:192.168.10.100:25    ::ffff:192.168.10.200:57509 TIME_WAIT
tcp        0     52 ::ffff:192.168.10.100:22    ::ffff:192.168.10.210:1504  ESTABLISHED
udp        0      0 127.0.0.1:53                0.0.0.0:*
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node Path
unix  2      [ ACC ]     STREAM     LISTENING     4792   public/cleanup
unix  2      [ ACC ]     STREAM     LISTENING     4799   private/rewrite
......(底下省略)......

netstat 的輸出主要分為兩大部分,分別是 TCP/IP 的網路介面部分,以及傳統的 Unix socket 部分。 還記得我們在基礎篇裡面曾經談到檔案的類型嗎?那個 socket 與 FIFO 檔案還記得吧? 那就是在 Unix 介面用來做為程式資料交流的介面了,也就是上頭表格內看到的 Active Unix domain sockets 的內容囉~

通常我都是建議加上『 -n 』這個參數的,因為可以避過主機名稱與服務名稱的反查,直接以 IP 及埠口號碼 (port number) 來顯示,顯示的速度上會快很多!至於在輸出的訊息當中, 我們先來談一談關於網路連線狀態的輸出部分,他主要是分為底下幾個大項:

    * Proto:該連線的封包協定,主要為 TCP/UDP 等封包;
    * Recv-Q:非由使用者程式連接所複製而來的總 bytes 數;
    * Send-Q:由遠端主機所傳送而來,但不具有 ACK 標誌的總 bytes 數, 意指主動連線 SYN 或其他標誌的封包所佔的 bytes 數;
    * Local Address:本地端的位址,可以是 IP (-n 參數存在時), 也可以是完整的主機名稱。如上表我們看到的 IP 格式有兩種,一種是 IPv4 的標準, 亦即是四組十進位的數字後面加上冒號『:』後,接著 port number 。一種是 IPv6 , 前面的 IP 加上很多冒號『:』的格式。我們可以由這個顯示的資料看出這個服務是開放在哪一個介面, 例如上表當中, port 22 是開放在 0.0.0.0 ,亦即是所有介面都可以連到 port 22 , 至於 port 53 則僅開放在本機的 127.0.0.1 這個介面而已,所以是不對外部介面開放的意思。
    * Foreign Address:遠端的主機 IP 與 port number
    * stat:狀態列,主要的狀態含有:
          o ESTABLISED:已建立連線的狀態;
          o SYN_SENT:發出主動連線 (SYN 標誌) 的連線封包;
          o SYN_RECV:接收到一個要求連線的主動連線封包;
          o FIN_WAIT1:該插槽服務(socket)已中斷,該連線正在斷線當中;
          o FIN_WAIT2:該連線已掛斷,但正在等待對方主機回應斷線確認的封包;
          o TIME_WAIT:該連線已掛斷,但 socket 還在網路上等待結束;
          o LISTEN:通常用在服務的監聽 port !可使用『 -l 』參數查閱。

基本上,我們常常談到的 netstat 的功能,就是在觀察網路的連線狀態了,而網路連線狀態中, 又以觀察『我目前開了多少的 port 在等待用戶端的連線』以及 『目前我的網路連線狀態中,有多少連線已建立或產生問題』最常見。 那你如何瞭解與觀察呢?通常我是這樣處理的:

範例三:秀出目前已經啟動的網路服務
[root@linux ~]# netstat -tulnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address   Foreign Address  State    PID/Program name
tcp        0      0 0.0.0.0:25      0.0.0.0:*        LISTEN   2141/master
tcp        0      0 :::22           :::*             LISTEN   1924/sshd
tcp        0      0 :::25           :::*             LISTEN   2141/master
udp        0      0 127.0.0.1:53    0.0.0.0:*                 1911/named
# 上面最重要的其實是那個 -l 的參數,因為可以僅列出有在 Listen 的 port

你可以在上面的範例當中發現,我的網路連線僅有對外開放 port 25 以及 port 22 而已 (因為針對 0.0.0.0 開放), 至於 port 53 則僅針對內部的 127.0.0.1 來開放,所以是不對 Internet 開放這個服務的喔! 而其中 port 22,25 都是使用 TCP 封包,至於 port 53 則是開放在 UDP 封包的狀態! 再仔細的看,每一行輸出的最右邊,你可以發現我的主機 port 22 是由 sshd 這支程式所啟動的, 並且他的 PID 是 1924 ,看到這邊,聰明的您應該知道,『那我如何關閉這個 port 』吧?使用 kill 或 killall 即可啊! ^_^

範例四:觀察本機上頭所有的網路連線狀態
[root@linux ~]# netstat -atunp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address     Foreign Address     State       PID/Program name
tcp        0      0 0.0.0.0:25        0.0.0.0:*           LISTEN      2141/master
tcp        0      0 :::22             :::*                LISTEN      1924/sshd
tcp        0      0 :::25             :::*                LISTEN      2141/master
tcp        0     68 192.168.1.100:22  192.168.1.210:1504  ESTABLISHED 30417/sshd:
udp        0      0 127.0.0.1:53      0.0.0.0:*                       1911/named

看到上頭的特殊字體吧?那代表目前已經建立連線的一條網路連線,他是由遠端主機 192.168.1.210 啟動一個大於 1024 的埠口向本地端主機 192.168.1.100 的 port 22 進行連線的一條連線, 你必須要想起來的是:『Client 端是隨機取一個大於 1024 以上的 port 進行連線』,此外『只有 root 可以啟動小於 1023 以下的 port 』,那就看的懂上頭那條連線囉!如果這條連線你想要砍掉他的話, 看到最右邊的 30417/sshd 了沒? kill 會用吧! ^_^

至於傳統的 Unix socket 的資料,記得使用 man netstat 查閱一下吧! 這個 Unix socket 通常是用在一些僅在本機上運作的程式所開啟的插槽介面檔, 例如 X Window 不都是在本機上運作而已嗎?那何必啟動網路的 port 呢?當然可以使用 Unix socket 囉,另外,例如 Postfix 這一類的網路伺服器,由於很多動作都是在本機上頭來完成的, 所以以會佔用很多的 Unix socket 喔!

例題一:請說明服務名稱與 port number 的對應在 Linux 當中,是用那個檔案來設定對應的?
答: /etc/services

TOP

發新話題

本站所有圖文均屬網友發表,僅代表作者的觀點與本站無關,如有侵權請通知版主會盡快刪除。