① linux下面怎麼查詢某個進程正在使用的socket句柄數量
可以通過指令查詢當前進程打開了多少句柄,Linux下有exec函數族可以執行指令,把指令寫進去就行了。
-查看當前進程打開了多少句柄數
# lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more
-根據ID號來查看進程名。
# ps aef|grep ID號
滿意請採納。
② Linux怎樣查看埠連接數
linux下,可以通過natstat命令來查看埠的連接狀況,比如連接數
例如,查看9090埠的連接狀況:
查看某個埠的連接數
netstat -nat | grep -iw "9090" | wc -l
查看連接狀況
netstat -nat | grep -iw "9090"
③ 如何查看linux並發連接數
1、查看Web伺服器(Nginx Apache)的並發請求數及其TCP連接狀態:
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}
netstat -n|grep ^tcp|awk '{print $NF}'|sort -nr|uniq -c
或者:
netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"t",state[key]}
返回結果一般如下:
LAST_ACK 5 (正在等待處理的請求數)
SYN_RECV 30
ESTABLISHED 1597 (正常數據傳輸狀態)
FIN_WAIT1 51
FIN_WAIT2 504
TIME_WAIT 1057 (處理完畢,等待超時結束的請求數)
其他參數說明:
CLOSED:無連接是活動的或正在進行
LISTEN:伺服器在等待進入呼叫
SYN_RECV:一個連接請求已經到達,等待確認
SYN_SENT:應用已經開始,打開一個連接
ESTABLISHED:正常數據傳輸狀態
FIN_WAIT1:應用說它已經完成
FIN_WAIT2:另一邊已同意釋放
ITMED_WAIT:等待所有分組死掉
CLOSING:兩邊同時嘗試關閉
TIME_WAIT:另一邊已初始化一個釋放
LAST_ACK:等待所有分組死掉
2、查看Nginx運行進程數
ps -ef | grep nginx | wc -l
返回的數字就是nginx的運行進程數,如果是apache則執行
ps -ef | grep httpd | wc -l
3、查看Web伺服器進程連接數:
netstat -antp | grep 80 | grep ESTABLISHED -c
④ 查看linux中的TCP連接數
1)統計80埠連接數
2)統計httpd協議連接數
3)、統計已連接上的,狀態為「established
4)、查出哪個IP地址連接最多,將其封了.
1、查看apache當前並發訪問數:
對比httpd.conf中MaxClients的數字差距多少。
2、查看有多少個進程數:
3、可以使用如下參數查看數據
統計httpd進程數,連個請求會啟動一個進程,使用於Apache伺服器。
表示Apache能夠處理1388個並發請求,這個值Apache可根據負載情況自動調整。
4341
netstat -an會列印系統當前網路鏈接狀態,而grep -i "80"是用來提取與80埠有關的連接的,wc -l進行連接數統計。
最終返回的數字就是當前所有80埠的請求總數。
netstat -an會列印系統當前網路鏈接狀態,而grep ESTABLISHED 提取出已建立連接的信息。 然後wc -l統計。
最終返回的數字就是當前所有80埠的已建立連接的總數。
查看Apache的並發請求數及其TCP連接狀態:
TIME_WAIT 8947 等待足夠的時間以確保遠程TCP接收到連接中斷請求的確認
FIN_WAIT1 15 等待遠程TCP連接中斷請求,或先前的連接中斷請求的確認
FIN_WAIT2 1 從遠程TCP等待連接中斷請求
ESTABLISHED 55 代表一個打開的連接
SYN_RECV 21 再收到和發送一個連接請求後等待對方對連接請求的確認
CLOSING 2 沒有任何連接狀態
LAST_ACK 4 等待原來的發向遠程TCP的連接中斷請求的確認
TCP連接狀態詳解
LISTEN: 偵聽來自遠方的TCP埠的連接請求
SYN-SENT: 再發送連接請求後等待匹配的連接請求
SYN-RECEIVED:再收到和發送一個連接請求後等待對方對連接請求的確認
ESTABLISHED: 代表一個打開的連接
FIN-WAIT-1: 等待遠程TCP連接中斷請求,或先前的連接中斷請求的確認
FIN-WAIT-2: 從遠程TCP等待連接中斷請求
CLOSE-WAIT: 等待從本地用戶發來的連接中斷請求
CLOSING: 等待遠程TCP對連接中斷的確認
LAST-ACK: 等待原來的發向遠程TCP的連接中斷請求的確認
TIME-WAIT: 等待足夠的時間以確保遠程TCP接收到連接中斷請求的確認
CLOSED: 沒有任何連接狀態
LAST_ACK 5
SYN_RECV 30
ESTABLISHED 1597
FIN_WAIT1 51
FIN_WAIT2 504
TIME_WAIT 1057
其中的
SYN_RECV表示正在等待處理的請求數;
ESTABLISHED表示正常數據傳輸狀態;
TIME_WAIT表示處理完畢,等待超時結束的請求數。
查看Apache並發請求數及其TCP連接狀態
查看httpd進程數(即prefork模式下Apache能夠處理的並發請求數):
返回結果示例:
1388
表示Apache能夠處理1388個並發請求,這個值Apache可根據負載情況自動調整,我這組伺服器中每台的峰值曾達到過2002。
查看Apache的並發請求數及其TCP連接狀態:
返回結果示例:
LAST_ACK 5
SYN_RECV 30
ESTABLISHED 1597
FIN_WAIT1 51
FIN_WAIT2 504
TIME_WAIT 1057
其中的SYN_RECV表示正在等待處理的請求數;ESTABLISHED表示正常數據傳輸狀態;TIME_WAIT表示處理完畢,等待超時結束的請求數。
狀態:描述
CLOSED:無連接是活動 的或正在進行
LISTEN:伺服器在等待進入呼叫
SYN_RECV:一個連接請求已經到達,等待確認
SYN_SENT:應用已經開始,打開一個連接
ESTABLISHED:正常數據傳輸狀態
FIN_WAIT1:應用說它已經完成
FIN_WAIT2:另一邊已同意釋放
ITMED_WAIT:等待所有分組死掉
CLOSING:兩邊同時嘗試關閉
TIME_WAIT:另一邊已初始化一個釋放
LAST_ACK:等待所有分組死掉
vim /etc/sysctl.conf
編輯文件,加入以下內容:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
然後執行 /sbin/sysctl -p 讓參數生效。
net.ipv4.tcp_syncookies = 1 表示開啟SYN cookies。當出現SYN等待隊列溢出時,啟用cookies來處理,可防範少量SYN攻擊,默認為0,表示關閉;
net.ipv4.tcp_tw_reuse = 1 表示開啟重用。允許將TIME-WAIT sockets重新用於新的TCP連接,默認為0,表示關閉;
net.ipv4.tcp_tw_recycle = 1 表示開啟TCP連接中TIME-WAIT sockets的快速回收,默認為0,表示關閉。
net.ipv4.tcp_fin_timeout 修改系統默認的 TIMEOUT 時間
客戶端與伺服器端建立TCP/IP連接後關閉SOCKET後,伺服器端連接的埠
狀態為TIME_WAIT
是不是所有執行主動關閉的socket都會進入TIME_WAIT狀態呢?
有沒有什麼情況使主動關閉的socket直接進入CLOSED狀態呢?
主動關閉的一方在發送最後一個 ack 後
就會進入 TIME_WAIT 狀態 停留2MSL(max segment lifetime)時間
這個是TCP/IP必不可少的,也就是「解決」不了的。
也就是TCP/IP設計者本來是這么設計的
主要有兩個原因
1。防止上一次連接中的包,迷路後重新出現,影響新連接
(經過2MSL,上一次連接中所有的重復包都會消失)
2。可靠的關閉TCP連接
在主動關閉方發送的最後一個 ack(fin) ,有可能丟失,這時被動方會重新發
fin, 如果這時主動方處於 CLOSED 狀態 ,就會響應 rst 而不是 ack。所以
主動方要處於 TIME_WAIT 狀態,而不能是 CLOSED 。
TIME_WAIT 並不會佔用很大資源的,除非受到攻擊。
還有,如果一方 send 或 recv 超時,就會直接進入 CLOSED 狀態
如何合理設置apache httpd的最大連接數?
手頭有一個網站在線人數增多,訪問時很慢。初步認為是伺服器資源不足了,但經反復測試,一旦連接上,不斷點擊同一個頁面上不同的鏈接,都能迅速打開,這種現象就是說明apache最大連接數已經滿了,新的訪客只能排隊等待有空閑的鏈接,而如果一旦連接上,在keeyalive 的存活時間內(KeepAliveTimeout,默認5秒)都不用重新打開連接,因此解決的方法就是加大apache的最大連接數。
1.在哪裡設置?
apache 2.24,使用默認配置(FreeBSD 默認不載入自定義MPM配置),默認最大連接數是250
在/usr/local/etc/apache22/httpd.conf中載入MPM配置(去掉前面的注釋):
Include etc/apache22/extra/httpd-mpm.conf
可見的MPM配置在/usr/local/etc/apache22/extra/httpd-mpm.conf,但裡面根據httpd的工作模式分了很多塊,哪一部才是當前httpd的工作模式呢?可通過執行 apachectl -l 來查看:
Compiled in moles:
core.c
prefork.c
http_core.c
mod_so.c
看到prefork 字眼,因此可見當前httpd應該是工作在prefork模式,prefork模式的默認配置是:
<IfMole mpm_prefork_mole>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
</IfMole>
2.要加到多少?
連接數理論上當然是支持越大越好,但要在伺服器的能力范圍內,這跟伺服器的CPU、內存、帶寬等都有關系。
查看當前的連接數可以用:
ps aux | grep httpd | wc -l
或:
pgrep httpd|wc -l
計算httpd佔用內存的平均數:
ps aux|grep -v grep|awk '/httpd/{sum+=$6;n++};END{print sum/n}'
由於基本都是靜態頁面,CPU消耗很低,每進程佔用內存也不算多,大約200K。
伺服器內存有2G,除去常規啟動的服務大約需要500M(保守估計),還剩1.5G可用,那麼理論上可以支持1.5 1024 1024*1024/200000 = 8053.06368
約8K個進程,支持2W人同時訪問應該是沒有問題的(能保證其中8K的人訪問很快,其他的可能需要等待1、2秒才能連上,而一旦連上就會很流暢)
控制最大連接數的MaxClients ,因此可以嘗試配置為:
<IfMole mpm_prefork_mole>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
ServerLimit 5500
MaxClients 5000
MaxRequestsPerChild 100
</IfMole>
注意,MaxClients默認最大為250,若要超過這個值就要顯式設置ServerLimit,且ServerLimit要放在MaxClients之前,值要不小於MaxClients,不然重啟httpd時會有提示。
重啟httpd後,通過反復執行pgrep httpd|wc -l 來觀察連接數,可以看到連接數在達到MaxClients的設值後不再增加,但此時訪問網站也很流暢,那就不用貪心再設置更高的值了,不然以後如果網站訪問突增不小心就會耗光伺服器內存,可根據以後訪問壓力趨勢及內存的佔用變化再逐漸調整,直到找到一個最優的設置值。
(MaxRequestsPerChild不能設置為0,可能會因內存泄露導致伺服器崩潰)
更佳最大值計算的公式:
apache_max_process_with_good_perfermance < (total_hardware_memory / apache_memory_per_process ) * 2
apache_max_process = apache_max_process_with_good_perfermance * 1.5
附:
實時檢測HTTPD連接數:
watch -n 1 -d "pgrep httpd|wc -l"
⑤ Linux 系統如何通過 netstat 命令查看連接數判斷攻擊
很多時候我們會遇到伺服器遭受 cc 或 syn 等攻擊,如果發現自己的網站訪問異常緩慢且流量異常。可以使用系統內置 netstat 命令 簡單判斷一下伺服器是否被攻擊。常用的 netstat 命令
該命令將顯示所有活動的網路連接。
查看同時連接到哪弊游帆個伺服器 IP 比較多,cc 攻擊用。使用雙網卡或多網卡可用。
查看哪些 IP 連接到伺服器連接多,可以查看連接異常 IP。
顯示所有 80 埠的網路連接並排序。這里的 80 埠是 http 埠,所以可以用來監控 web 服務。如果看到同租雹一個 IP 有大量連接的話就可以判定單點流量攻擊了。
這個命令可以查找出當前伺服器有多少個活動的 SYNC_REC 連接。正常來說這個值很小,最好小於 5。 當有 Dos 攻擊或的時候,這個值相當的高。但是有些並發很高的伺服器,這個值確實是很高,因此很高並不能說明一定被攻擊。
列出所有連接過的 IP 地址。
列出所有發送 SYN_REC 連接節點的 IP 地址。
使用 netstat 命令計算每個主機連接到本機的連接數。
列出所有連接到本機的 UDP 或者 TCP 連接的 IP 數量。
檢查 ESTABLISHED 連接並且列出每個 IP 地址的連接數量。磨漏
列出所有連接到本機 80 埠的 IP 地址和其連接數。80 埠一般是用來處理 HTTP 網頁請求。
顯示連接 80 埠前 10 的 ip,並顯示每個 IP 的連接數。這里的 80 埠是 http 埠,所以可以用來監控 web 服務。如果看到同一個 IP 有大量連接的話就可以判定單點流量攻擊了。
⑥ linux查看tcp連接數
linux怎麼查看tcp連接數?我們一起來了解一下吧。⑦ 請使用linux系統命令統計出establish狀態的連接數有多少
netstat -an |grep ESTABLISHED |wc -l
⑧ Linux如何查看伺服器的並發數
linux查看連接數,並發數1、查看apache當前並發訪問數:
netstat
-an
grep
ESTABLISHED
wc
-l對比httpd.conf中MaxClients的數字差距多少。2、查看有多少個進程數:ps
auxgrep
httpdwc
-l3、可以使用如下參數查看數據server-status?auto#ps
-efgrep
httpdwc
-l1388統計httpd進程數,連個請求會啟動一個進程,使用於Apache伺服器。表示Apache能夠處理1388個並發請求,這個值Apache可根據負載情況自動調整。#netstat
-natgrep
-i
80wc
-l4341netstat
-an會列印系統當前網路鏈接狀態,而grep
-i
80是用來提取與80埠有關的連接的,wc
-l進行連接數統計。
最終返回的數字就是當前所有80埠的請求總數。#netstat
-nagrep
ESTABLISHEDwc
-l376netstat
-an會列印系統當前網路鏈接狀態,而grep
ESTABLISHED
提取出已建立連接的信息。
然後wc
-l統計。最終返回的數字就是當前所有80埠的已建立連接的總數。netstat
-natgrep
ESTABLISHEDwc
-
可查看所有建立連接的詳細記錄
查看Apache的並發請求數及其TCP連接狀態:linux命令:netstat
-n
awk
'/^tcp/
{++S[$NF]}
END
{for(a
in
S)
print
a,
S[a]}'返回結果示例:LAST_ACK
5SYN_RECV
30ESTABLISHED
1597FIN_WAIT1
51FIN_WAIT2
504TIME_WAIT
1057其中的SYN_RECV表示正在等待處理的請求數;ESTABLISHED表示正常數據傳輸狀態;TIME_WAIT表示處理完畢,等待超時結束的請求數。(這個參數還不太懂,為啥是等待超時結束,請大神指教)