1. linux支持最大的SOCKET連接數量是多少
並發socket連接數的多少決定於系統資源的多少,沒有一個常值的.在實際開發或者linux系統管理中也會根據需要進行相應的設置.
1.一般來說每一個網路連接,都會建立相應的socket句柄,同時每個連接也會有標准輸入輸出等基本的文件文件句柄,而且每一個socket連接都是進行文件操作的,因此連接數決定於系統資源.
2.Linux上一般可以通過ulimit來進行相應的資源限制,默認能打開的文件描述符自己可以查看.如下圖所示:
3.ulimit的命令格式:ulimit [-acdfHlmnpsStvw] [size]
參數說明:
-H 設置硬資源限制.
-S 設置軟資源限制.
-a 顯示當前所有的資源限制.
-c size:設置core文件的最大值.單位:blocks
-d size:設置數據段的最大值.單位:kbytes
-f size:設置創建文件的最大值.單位:blocks
-l size:設置在內存中鎖定進程的最大值.單位:kbytes
-m size:設置可以使用的常駐內存的最大值.單位:kbytes
-n size:設置內核可以同時打開的文件描述符的最大值.單位:n
-p size:設置管道緩沖區的最大值.單位:kbytes
-s size:設置堆棧的最大值.單位:kbytes
-t size:設置CPU使用時間的最大上限.單位:seconds
-v size:設置虛擬內存的最大值.單位:kbytes
-u <程序數目> 用戶最多可開啟的程序數目
2. 請問linux怎麼增大socket連接上限
1、修改用戶進程可打開文件數限制
在Linux平台上,無論編寫客戶端程序還是服務端程序,在進行高並發TCP連接處理時,
最高的並發數量都要受到系統對用戶單一進程同時可打開文件數量的限制(這是因為系統
為每個TCP連接都要創建一個socket句柄,每個socket句柄同時也是一個文件句柄)。
可使用ulimit命令查看系統允許當前用戶進程打開的文件數限制:
[speng@as4 ~]$ ulimit -n
1024
這表示當前用戶的每個進程最多允許同時打開1024個文件,這1024個文件中還得除去
每個進程必然打開的標准輸入,標准輸出,標准錯誤,伺服器監聽 socket,
進程間通訊的unix域socket等文件,那麼剩下的可用於客戶端socket連接的文件數就
只有大概1024-10=1014個左右。也就是說預設情況下,基於Linux的通訊程序最多允許
同時1014個TCP並發連接。
對於想支持更高數量的TCP並發連接的通訊處理程序,就必須修改Linux對當前用戶的
進程同時打開的文件數量的軟限制(soft limit)和硬限制(hardlimit)。其中軟限制
是指Linux在當前系統能夠承受的范圍內進一步限制用戶同時打開的文件數;硬限制
則是根據系統硬體資源狀況(主要是系統內存)計算出來的系統最多可同時打開的文件數量。
通常軟限制小於或等於硬限制。
修改上述限制的最簡單的辦法就是使用ulimit命令:
[speng@as4 ~]$ ulimit -n
上述命令中,在中指定要設置的單一進程允許打開的最大文件數。如果系統回顯
類似於「Operation notpermitted」之類的話,說明上述限制修改失敗,實際上是
因為在中指定的數值超過了Linux系統對該用戶打開文件數的軟限制或硬限制。
因此,就需要修改Linux系統對用戶的關於打開文件數的軟限制和硬限制。
第一步,修改/etc/security/limits.conf文件,在文件中添加如下行:
speng soft nofile 10240
speng hard nofile 10240
其中speng指定了要修改哪個用戶的打開文件數限制,可用』*'號表示修改所有用戶的限制;
soft或hard指定要修改軟限制還是硬限制;10240則指定了想要修改的新的限制值,
即最大打開文件數(請注意軟限制值要小於或等於硬限制)。修改完後保存文件。
第二步,修改/etc/pam.d/login文件,在文件中添加如下行:
session required /lib/security/pam_limits.so
這是告訴Linux在用戶完成系統登錄後,應該調用pam_limits.so模塊來設置系統對
該用戶可使用的各種資源數量的最大限制(包括用戶可打開的最大文件數限制),
而pam_limits.so模塊就會從/etc/security/limits.conf文件中讀取配置來設置這些限制值。
修改完後保存此文件。
第三步,查看Linux系統級的最大打開文件數限制,使用如下命令:
[speng@as4 ~]$ cat /proc/sys/fs/file-max
12158
這表明這台Linux系統最多允許同時打開(即包含所有用戶打開文件數總和)12158個文件,
是Linux系統級硬限制,所有用戶級的打開文件數限制都不應超過這個數值。通常這個系統級
硬限制是Linux系統在啟動時根據系統硬體資源狀況計算出來的最佳的最大同時打開文件數限制,
如果沒有特殊需要,不應該修改此限制,除非想為用戶級打開文件數限制設置超過此限制的值。
修改此硬限制的方法是修改/etc/rc.local腳本,在腳本中添加如下行:
echo 22158 > /proc/sys/fs/file-max
這是讓Linux在啟動完成後強行將系統級打開文件數硬限制設置為22158。修改完後保存此文件。
完成上述步驟後重啟系統,一般情況下就可以將Linux系統對指定用戶的單一進程允許同時
打開的最大文件數限制設為指定的數值。如果重啟後用 ulimit-n命令查看用戶可打開文件數限制
仍然低於上述步驟中設置的最大值,這可能是因為在用戶登錄腳本/etc/profile中使用ulimit -n命令
已經將用戶可同時打開的文件數做了限制。由於通過ulimit-n修改系統對用戶可同時打開文件的
最大數限制時,新修改的值只能小於或等於上次 ulimit-n設置的值,因此想用此命令增大這個
限制值是不可能的。
所以,如果有上述問題存在,就只能去打開/etc/profile腳本文件,
在文件中查找是否使用了ulimit-n限制了用戶可同時打開的最大文件數量,如果找到,
則刪除這行命令,或者將其設置的值改為合適的值,然後保存文件,用戶退出並重新登錄系統即可。
通過上述步驟,就為支持高並發TCP連接處理的通訊處理程序解除關於打開文件數量方面的系統限制。
2、修改網路內核對TCP連接的有關限制
在Linux上編寫支持高並發TCP連接的客戶端通訊處理程序時,有時會發現盡管已經解除了系統
對用戶同時打開文件數的限制,但仍會出現並發TCP連接數增加到一定數量時,再也無法成功
建立新的TCP連接的現象。出現這種現在的原因有多種。
第一種原因可能是因為Linux網路內核對本地埠號范圍有限制。此時,進一步分析為什麼無法
建立TCP連接,會發現問題出在connect()調用返回失敗,查看系統錯誤提示消息是「Can』t assign requestedaddress」。同時,如果在此時用tcpmp工具監視網路,會發現根本沒有TCP連接時客戶端
發SYN包的網路流量。這些情況說明問題在於本地Linux系統內核中有限制。
其實,問題的根本原因
在於Linux內核的TCP/IP協議實現模塊對系統中所有的客戶端TCP連接對應的本地埠號的范圍
進行了限制(例如,內核限制本地埠號的范圍為1024~32768之間)。當系統中某一時刻同時
存在太多的TCP客戶端連接時,由於每個TCP客戶端連接都要佔用一個唯一的本地埠號
(此埠號在系統的本地埠號范圍限制中),如果現有的TCP客戶端連接已將所有的本地埠號占滿,
則此時就無法為新的TCP客戶端連接分配一個本地埠號了,因此系統會在這種情況下在connect()
調用中返回失敗,並將錯誤提示消息設為「Can』t assignrequested address」。
有關這些控制
邏輯可以查看Linux內核源代碼,以linux2.6內核為例,可以查看tcp_ipv4.c文件中如下函數:
static int tcp_v4_hash_connect(struct sock *sk)
請注意上述函數中對變數sysctl_local_port_range的訪問控制。變數sysctl_local_port_range
的初始化則是在tcp.c文件中的如下函數中設置:
void __init tcp_init(void)
內核編譯時默認設置的本地埠號范圍可能太小,因此需要修改此本地埠范圍限制。
第一步,修改/etc/sysctl.conf文件,在文件中添加如下行:
net.ipv4.ip_local_port_range = 1024 65000
這表明將系統對本地埠范圍限制設置為1024~65000之間。請注意,本地埠范圍的最小值
必須大於或等於1024;而埠范圍的最大值則應小於或等於65535。修改完後保存此文件。
第二步,執行sysctl命令:
[speng@as4 ~]$ sysctl -p
如果系統沒有錯誤提示,就表明新的本地埠范圍設置成功。如果按上述埠范圍進行設置,
則理論上單獨一個進程最多可以同時建立60000多個TCP客戶端連接。
第二種無法建立TCP連接的原因可能是因為Linux網路內核的IP_TABLE防火牆對最大跟蹤的TCP
連接數有限制。此時程序會表現為在 connect()調用中阻塞,如同死機,如果用tcpmp工具監視網路,
也會發現根本沒有TCP連接時客戶端發SYN包的網路流量。由於 IP_TABLE防火牆在內核中會對
每個TCP連接的狀態進行跟蹤,跟蹤信息將會放在位於內核內存中的conntrackdatabase中,
這個資料庫的大小有限,當系統中存在過多的TCP連接時,資料庫容量不足,IP_TABLE無法為
新的TCP連接建立跟蹤信息,於是表現為在connect()調用中阻塞。此時就必須修改內核對最大跟蹤
的TCP連接數的限制,方法同修改內核對本地埠號范圍的限制是類似的:
第一步,修改/etc/sysctl.conf文件,在文件中添加如下行:
net.ipv4.ip_conntrack_max = 10240
這表明將系統對最大跟蹤的TCP連接數限制設置為10240。請注意,此限制值要盡量小,
以節省對內核內存的佔用。
第二步,執行sysctl命令:
[speng@as4 ~]$ sysctl -p
如果系統沒有錯誤提示,就表明系統對新的最大跟蹤的TCP連接數限制修改成功。
如果按上述參數進行設置,則理論上單獨一個進程最多可以同時建立10000多個TCP客戶端連接。
3、使用支持高並發網路I/O的編程技術
在Linux上編寫高並發TCP連接應用程序時,必須使用合適的網路I/O技術和I/O事件分派機制。
可用的I/O技術有同步I/O,非阻塞式同步I/O(也稱反應式I/O),以及非同步I/O。在高TCP並發的情形下,
如果使用同步I/O,這會嚴重阻塞程序的運轉,除非為每個TCP連接的I/O創建一個線程。
但是,過多的線程又會因系統對線程的調度造成巨大開銷。因此,在高TCP並發的情形下使用
同步 I/O是不可取的,這時可以考慮使用非阻塞式同步I/O或非同步I/O。非阻塞式同步I/O的技術包括使用select(),poll(),epoll等機制。非同步I/O的技術就是使用AIO。
從I/O事件分派機制來看,使用select()是不合適的,因為它所支持的並發連接數有限(通常在1024個以內)。
如果考慮性能,poll()也是不合適的,盡管它可以支持的較高的TCP並發數,但是由於其採用
「輪詢」機制,當並發數較高時,其運行效率相當低,並可能存在I/O事件分派不均,導致部分TCP
連接上的I/O出現「飢餓」現象。而如果使用epoll或AIO,則沒有上述問題(早期Linux內核的AIO技術
實現是通過在內核中為每個 I/O請求創建一個線程來實現的,這種實現機制在高並發TCP連接的情形下
使用其實也有嚴重的性能問題。但在最新的Linux內核中,AIO的實現已經得到改進)。
綜上所述,在開發支持高並發TCP連接的Linux應用程序時,應盡量使用epoll或AIO技術來實現並發的
TCP連接上的I/O控制,這將為提升程序對高並發TCP連接的支持提供有效的I/O保證。
內核參數sysctl.conf的優化
/etc/sysctl.conf 是用來控制linux網路的配置文件,對於依賴網路的程序(如web伺服器和cache伺服器)
非常重要,RHEL默認提供的最好調整。
推薦配置(把原/etc/sysctl.conf內容清掉,把下面內容復制進去):
net.ipv4.ip_local_port_range = 1024 65536
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.ipv4.tcp_rmem=4096 87380 16777216
net.ipv4.tcp_wmem=4096 65536 16777216
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_window_scaling = 0
net.ipv4.tcp_sack = 0
net.core.netdev_max_backlog = 30000
net.ipv4.tcp_no_metrics_save=1
net.core.somaxconn = 262144
net.ipv4.tcp_syncookies = 0
net.ipv4.tcp_max_orphans = 262144
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
這個配置參考於cache伺服器varnish的推薦配置和SunOne 伺服器系統優化的推薦配置。
varnish調優推薦配置的地址為:http://varnish.projects.linpro.no/wiki/Performance
不過varnish推薦的配置是有問題的,實際運行表明「net.ipv4.tcp_fin_timeout = 3」的配置
會導致頁面經常打不開;並且當網友使用的是IE6瀏覽器時,訪問網站一段時間後,所有網頁都會
打不開,重啟瀏覽器後正常。可能是國外的網速快吧,我們國情決定需要
調整「net.ipv4.tcp_fin_timeout = 10」,在10s的情況下,一切正常(實際運行結論)。
修改完畢後,執行:
/sbin/sysctl -p /etc/sysctl.conf
/sbin/sysctl -w net.ipv4.route.flush=1
命令生效。為了保險起見,也可以reboot系統。
調整文件數:
linux系統優化完網路必須調高系統允許打開的文件數才能支持大的並發,默認1024是遠遠不夠的。
執行命令:
Shell代碼
echo ulimit -HSn 65536 >> /etc/rc.local
echo ulimit -HSn 65536 >>/root/.bash_profile
ulimit -HSn 65536
3. Linux下socket並發連接數怎麼設置
並發socket連接數的多少決定於系統資源的多少,沒有一個常值的.在實際開發或者linux系統管理中也會根據需要進行相應的設置.
1.一般來說每一個網路連接,都會建立相應的socket句柄,同時每個連接也會有標准輸入輸出等基本的文件文件句柄,而且每一個socket連接都是進行文件操作的,因此連接數決定於系統資源.
2.Linux上一般可以通過ulimit來進行相應的資源限制,默認能打開的文件描述符自己可以查看.如下圖所示:
3.ulimit的命令格式:ulimit [-acdfHlmnpsStvw] [size]
參數說明:
-H 設置硬資源限制.
-S 設置軟資源限制.
-a 顯示當前所有的資源限制.
-c size:設置core文件的最大值.單位:blocks
-d size:設置數據段的最大值.單位:kbytes
-f size:設置創建文件的最大值.單位:blocks
-l size:設置在內存中鎖定進程的最大值.單位:kbytes
-m size:設置可以使用的常駐內存的最大值.單位:kbytes
-n size:設置內核可以同時打開的文件描述符的最大值.單位:n
-p size:設置管道緩沖區的最大值.單位:kbytes
-s size:設置堆棧的最大值.單位:kbytes
-t size:設置CPU使用時間的最大上限.單位:seconds
-v size:設置虛擬內存的最大值.單位:kbytes
-u <程序數目> 用戶最多可開啟的程序數目
4. linux的socket連接數對性能有多大影響
當數量超過伺服器可以正常處理的范圍。數量越多,越擁塞,性能越差
5. 查看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"
6. linux下tcp客戶端能建立多少個長連接
這個文件是一個綜合性的問題。首先就tcp鏈接來說吧,主要體現在tcp的socket鏈接數上面,65535 應該是足夠用了,但是tcp連接11種狀態,不同不同狀態有可能有會話保持什麼的。這些暫且不說,現在tcp連接的還有Linux下文件的最大打開數量,流量帶寬等等。
優化:
ulimit -a 查看最大文件打開數量,然後修改
2.減少tcp長連接,或其他狀態鏈接,可以改下會話保持時間,主動自動關閉(不建議),重復使用tcp等。這個是在tcp鏈接數來進行考慮。
3.增多IP,增多埠,一個IP是這么多,那可以在一台Linux上綁定多個IP來增加鏈接數。等等
運維是一個大的課題,大家都是在學習中提高的,我的答案不一定正確,大家可以相互指正。更多Linux可以參考《Linux就該這樣學》,加油
7. Linux系統支持的最大TCP連接是多少
這個文件是一個綜合性的問題。首先就tcp鏈接來說吧,主要體現在tcp的socket鏈接數回上面,65535 應該是足夠答用了,但是tcp連接11種狀態,不同不同狀態有可能有會話保持什麼的。這些暫且不說,現在tcp連接的還有Linux下文件的最大打開數量,流量帶寬等等。
優化:
1.ulimit -a 查看最大文件打開數量,然後修改
2.減少tcp長連接,或其他狀態鏈接,可以改下會話保持時間,主動自動關閉(不建議),重復使用tcp等。這個是在tcp鏈接數來進行考慮。
3.增多IP,增多埠,一個IP是這么多,那可以在一台Linux上綁定多個IP來增加鏈接數。