知乎專欄 | 多維度架構 |
firewall (nat session) - switch (Forwarding bandwidth) - os (ulimit,sysctl) - application (httpd,vsftpd,tomcat ...)
會話數,國人俗稱並發數。當你的頻寬沒有滿,但tcp不能建立連接,這時你就要考慮會話數了。
購買防火牆的時候主要有兩個指標,一是會話數,二是頻寬,三是配備模組。售前工程師都會交代清楚。
例如 Cisco ASA 5550 會話數65萬,2個1G介面,可選IPS模組等等...
使用下面命令可以查看當前會話數
show conn count
Linux 影響會話數的的參數與配置檔案
/etc/security/limits.conf , /etc/security/limits.d
nofile - max number of open files 在POSIX系統中硬件,管道,Socket 均被看作是一個設備,如硬碟是塊設備,顯示器是字元設備,操作這些設備均使用c的open函數,被算作打開一個檔案。所有設備都是如此,加上web伺服器還要讀取很多HTML檔案,系統對nofile 開銷是非常巨大的。
nproc - max number of processes 目前多綫程是主流,使用多綫程技術這個參數可以不關心。像Oracle,PostgreSQL, Apache prefork,你就需要關心這個參數
/etc/sysctl.conf , /etc/sysctl.d/
net.ipv4.ip_local_port_range = 1024 65500 可用連接埠範圍
tcp 協議當你嘗試主動與伺服器建立連接,如:telnet 172.16.0.1 80,本地會開啟一個大於1024小於65500的連接埠
client: localhost:1025 --- 172.16.0.1:80 server
以上參數要綜合你的CPU處理能力,內存空間,硬碟IO等等,才能配置出合理數值
配置過大(小馬拉大車),超出你的伺服器處理能力,導致伺服器無響應,最終只能重啟
配置過小(大馬拉小車),你的伺服器長時間處于空間狀態,CPU,內存沒有得到合理使用
在我的《Netkiller Linux 手札》中你可以找到具體的設置方法。
連接數受限與limits與sysctl
apache : httpd/conf/extra/httpd-mpm.conf
<IfModule mpm_worker_module> ServerLimit 16 ThreadLimit 256 StartServers 8 MaxClients 4096 MinSpareThreads 64 MaxSpareThreads 256 ThreadsPerChild 256 MaxRequestsPerChild 10000 </IfModule>
mysql : /etc/my.cnf
[mysqld] max_connections=250
不依依列舉,有興趣看我的系列文檔。