性能。設置內核參數的方法是通過 proc 接口,也就是通過讀寫 /proc 中的值。幸運的是,sysctl 可以讀取 /etc/sysctl.conf 中的值並根據需要填充
/proc,這樣就能夠更輕松地管理這些參數。清單 2 展示在互聯網服務器上應用於 Internet 服務器的壹些比較激進的網絡設置。
# Use TCP syncookies when needed
net.ipv4.tcp_syncookies = 1
# Enable TCP window scaling
net.ipv4.tcp_window_scaling: = 1
# Increase TCP max buffer size
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
# Increase Linux autotuning TCP buffer limits
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
# Increase number of ports available
net.ipv4.ip_local_port_range = 1024 65000
將這些設置添加到 /etc/sysctl.conf 的現有內容中。第壹個設置啟用 TCP SYN cookie。當從客戶機發來新的 TCP 連接時,數據包設置了 SYN 位,服務
器就為這個半開的連接創建壹個條目,並用壹個 SYN-ACK 數據包進行響應。在正常操作中,遠程客戶機用壹個 ACK 數據包進行響應,這會使半開的連接
轉換為全開的。有壹種稱為 SYN 泛濫(SYN flood) 的網絡攻擊,它使 ACK 數據包無法返回,導致服務器用光內存空間,無法處理到來的連接。SYN
cookie 特性可以識別出這種情況,並使用壹種優雅的方法保留隊列中的空間(細節參見參考資料壹節)。大多數系統都默認啟用這個特性,但是確保配
置這個特性更可靠。
啟用 TCP 窗口伸縮使客戶機能夠以更高的速度下載數據。TCP 允許在未從遠程端收到確認的情況下發送多個數據包,默認設置是最多 64 KB,在與延遲比
較大的遠程客戶機進行通信時這個設置可能不夠。窗口伸縮會在頭中啟用更多的位,從而增加窗口大小。
後面四個配置項增加 TCP 發送和接收緩沖區。這使應用程序可以更快地丟掉它的數據,從而為另壹個請求服務。還可以強化遠程客戶機在服務器繁忙時發
送數據的能力。
最後壹個配置項增加可用的本地端口數量,這樣就增加了可以同時服務的最大連接數量。
在下壹次引導系統時,或者下壹次運行 sysctl -p /etc/sysctl.conf 時,這些設置就會生效。
----------------------------------------------------------------------------------------------------------------------------
磁盤子系統的調優
磁盤在 LAMP 架構中扮演著重要的角色。靜態文件、模板和代碼都來自磁盤,組成數據庫的數據表和索引也來自磁盤。對磁盤的許多調優(尤其是對於數
據庫)集中於避免磁盤訪問,因為磁盤訪問的延遲相當高。因此,花壹些時間對磁盤硬件進行優化是有意義的。
首先要做的是,確保在文件系統上禁用 atime 日誌記錄特性。atime 是最近訪問文件的時間,每當訪問文件時,底層文件系統必須記錄這個時間戳。因為
系統管理員很少使用 atime,禁用它可以減少磁盤訪問時間。禁用這個特性的方法是,在 /etc/fstab 的第四列中添加 noatime 選項。
演示如何啟用 noatime 的 fstab 示例
/dev/VolGroup00/LogVol00 / ext3 defaults,noatime 1 1
LABEL=/boot /boot ext3 defaults,noatime 1 2
devpts /dev/pts devpts gid=5,mode=620 0 0
tmpfs /dev/shm tmpfs defaults 0 0
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
LABEL=SWAP-hdb2 swap swap defaults 0 0
LABEL=SWAP-hda3 swap swap defaults 0 0
有多種磁盤硬件組合,而且 Linux 不壹定能夠探測出訪問磁盤的最佳方式。可以使用 hdparm 命令查明和設置用來訪問 IDE 磁盤的方法。hdparm -t
/path/to/device 執行速度測試,可以將這個測試結果作為性能基準。為了使結果盡可能準確,在運行這個命令時系統應該是空閑的。
在 /dev/hd 上執行的速度測試
# hdparm -t /dev/hda
/dev/hda:
Timing buffered disk reads: 182 MB in 3.02 seconds = 60.31 MB/sec
hdparm 的常用選項
選項 描述
-vi 向磁盤查詢它支持的設置以及它正在使用的設置。
-c 查詢/啟用 (E)IDE 32 位 I/O 支持。hdparm -c 1 /dev/hda 啟用這個設置。
-m 查詢/設置每中斷多扇區模式。如果設置大於零,設置值就是每個中斷可以傳輸的最大扇區數量。
-d 1 -X 啟用直接內存訪問(DMA)傳輸並設置 IDE 傳輸模式。hdparm 手冊頁詳細說明了在 -X 後面可以設置的數字。只有在 -vi 說明目前並未使用最
快速的模式的情況下,才需要進行這個設置。
不幸的是,對於 Fiber Channel and Small Computer Systems Interface(SCSI)系統,調優依賴於具體的驅動器。
必須將有幫助的設置添加到啟動腳本中,比如 rc.local。
----------------------------------------------------------------------------------------------------------------------------
TCP/IP子系統的調優
所有的TCP/IP調優參數都位於/proc/sys/net/目錄。 例如, 下面是最重要的壹些調優參數, 後面是它們的含義:
1. /proc/sys/net/core/rmem_max — 最大的TCP數據接收緩沖
2. /proc/sys/net/core/wmem_max — 最大的TCP數據發送緩沖
3. /proc/sys/net/ipv4/tcp_timestamps — 時間戳在(請參考RFC 1323)TCP的包頭增加12個字節
4. /proc/sys/net/ipv4/tcp_sack — 有選擇的應答
5. /proc/sys/net/ipv4/tcp_window_scaling — 支持更大的TCP窗口。 如果TCP窗口最大超過65535(64K), 必須設置該數值為1
6. rmem_default — 默認的接收窗口大小
7. rmem_max — 接收窗口的最大大小
8. wmem_default — 默認的發送窗口大小
9. wmem_max — 發送窗口的最大大小
/proc目錄下的所有內容都是臨時性的, 所以重啟動系統後任何修改都會丟失。
建議在系統啟動時自動修改TCP/IP參數:
把下面代碼增加到/etc/rc.local文件, 然後保存文件, 系統重新引導的時候會自動修改下面的TCP/IP參數:
echo 256960 > /proc/sys/net/core/rmem_default
echo 256960 > /proc/sys/net/core/rmem_max
echo 256960 > /proc/sys/net/core/wmem_default
echo 256960 > /proc/sys/net/core/wmem_max
echo 0 > /proc/sys/net/ipv4/tcp_timestamps
echo 1 > /proc/sys/net/ipv4/tcp_sack
echo 1 > /proc/sys/net/ipv4/tcp_window_scaling
TCP/IP參數都是自解釋的, TCP窗口大小設置為256960, 禁止TCP的時間戳(取消在每個數據包的頭中增加12字節), 支持更大的TCP窗口和TCP有選擇的
應答。
上面數值的設定是根據互連網連接和最大帶寬/延遲率來決定。
註: 上面實例中的數值可以實際應用, 但它只包含了壹部分參數。
另外壹個方法: 使用 /etc/sysctl.conf 在系統啟動時將參數配置成您所設置的值:
net.core.rmem_default = 256960
net.core.rmem_max = 256960
net.core.wmem_default = 256960
net.core.wmem_max = 256960
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_sack =1
net.ipv4.tcp_window_scaling = 1
----------------------------------------------------------------------------------------------------------------------------
文件子系統的調優
ulimit -a 用來顯示當前的各種用戶進程限制。
Linux對於每個用戶,系統限制其最大進程數。為提高性能,可以根據設備資源情況,
設置各linux 用戶的最大進程數,下面我把某linux用戶的最大進程數設為10000個:
ulimit -u 10000
對於需要做許多 socket 連接並使它們處於打開狀態的 Java 應用程序而言,
最好通過使用 ulimit -n xx 修改每個進程可打開的文件數,缺省值是 1024。
ulimit -n 4096 將每個進程可以打開的文件數目加大到4096,缺省為1024
其他建議設置成無限制(unlimited)的壹些重要設置是:
數據段長度:ulimit -d unlimited
最大內存大小:ulimit -m unlimited
堆棧大小:ulimit -s unlimited
CPU 時間:ulimit -t unlimited
虛擬內存:ulimit -v unlimited
暫時地,適用於通過 ulimit 命令登錄 shell 會話期間。
永久地,通過將壹個相應的 ulimit 語句添加到由登錄 shell 讀取的文件中, 即特定於 shell 的用戶資源文件,如:
1)、解除 Linux 系統的最大進程數和最大文件打開數限制:
vi /etc/security/limits.conf
# 添加如下的行
* soft noproc 11000
* hard noproc 11000
* soft nofile 4100
* hard nofile 4100
說明:* 代表針對所有用戶
noproc 是代表最大進程數
nofile 是代表最大文件打開數
2)、讓 SSH 接受 Login 程式的登入,方便在 ssh 客戶端查看 ulimit -a 資源限制:
a、vi /etc/ssh/sshd_config
把 UserLogin 的值改為 yes,並把 # 註釋去掉
b、重啟 sshd 服務:
/etc/init.d/sshd restart
3)、修改所有 linux 用戶的環境變量文件:
vi /etc/profile
ulimit -u 10000
ulimit -n 4096
ulimit -d unlimited
ulimit -m unlimited
ulimit -s unlimited
ulimit -t unlimited
ulimit -v unlimited
/**************************************
有時候在程序裏面需要打開多個文件,進行分析,系統壹般默認數量是1024,(用ulimit -a可以看到)對於正常使用是夠了,但是對於程序來講,就太少
了。
修改2個文件。
1./etc/security/limits.conf
vi /etc/security/limits.conf
加上:
* soft nofile 8192
* hard nofile 20480
沒有留言:
張貼留言