在 RedHat Linux 上做性能調優
性能調優的目的是提高系統性能,減少電力消耗,或者減輕某個應用對系統中其它應用的影響。但是如果貿然地,沒有適當的手段進行系統調優,那可能會產生負面效果。
如果我們有系統有計劃地進行性能調優,那么它就會成為嚴謹的科學探索而不是隨心所欲的藝術行為。
具體方法
首先我們需要弄明白“正常”的系統性能情形是什么樣的。
查找潛在的性能問題并進行參數調優來修復。觀察這些調整對系統的影響并決定是否確認保持這種調整或者恢復到調整前的狀態。
概要:
- 收集數據,建立基準。
- 開啟 tuned 功能并選擇合理的默認值。
- 觀察圖形報告統計,確認所做的調整是否正確。提交更改或回滾恢復。
- 確定潛在的性能問題。
- 調整優化參數。
- 重復步驟3。
在開始性能調優前,首先建立基準
調優前后的衡量標準
你可以在調優前后通過使用“stress tester“來快速為應用建立基準,參見 Stress testing with Apache JMeter 這篇文章中的示例。
使用歷史數據的衡量標準
如果你有以前的歷史數據作為衡量標準,你可以使用帶有圖形化報告的資源監控的歷史數據。即使在當今這種自動化數據分析手段流行的時代,古老的肉眼觀察方式依然非常有用,正因為如此,你需要圖形化的展示方式,而不是滿眼的數據。
(另外,你可以給你的老板展示美觀的圖形數據,也許他/她們突然走到你面前問你在花費寶貴的公司時間做什么)
你應該用圖形來展示所提供服務的資源使用度情況和反應時間。對于 web server 來說,這可能是請求的數量,每個請求的反應時間,以及每個響應的數據量大小。
對于 apache 和 nginx 來說,請參見 Logging elapse time in apache and nginx ,這篇文章描述了如何記錄需要的數量。
你應該圖形化這些應用對資源的使用度,隊列以及響應時間。通常來說是對網絡和磁盤的 IO 進行圖形化展示。
圖形化每秒的請求數量以及請求響應延遲。
用于圖形化展示的工具
我個人喜歡用 Munin。這個工具可以在 EPEL 倉庫找到。這個工具絕對稱得上“老式的”,但它非常容易上手,而且它還有非常豐富的插件可供使用。在你安裝使用 Munin 上,它會默認安裝許多圖形化工具。如果你需要更多的圖形化插件,你可以在 contrib 倉庫上找到它們。
對于一些更先進的監控工具,Elasticsearch,Logstash 和 Kibana 在日志分析和可視化展示方面更受歡迎。設置 ELK 來加載所需要監控的數據,使用 Topbeat 作為資源使用度衡量標準,使用 Filebeat 作為實時日志文件分析,使用 Packetbeat 來分析在線網絡數據。
可選的工具有很多,選用你所了解的,喜歡的或者你想學習的。你需要記住的最重要的事情是:確保在你開始修改操作前知道你的基準數據。
性能調優工具
tuna
tuna 可以用來控制進程及其調度關系。
例如:在一個健狀的系統上卻有差的網絡性能,并且可以觀察到有幾個處理核心處于空閑狀態。通過檢查網卡發現多工調度隊列功能已開啟,而且它們已經分布在所有可用的處理核心上。
此處假設這些網卡命名為“enp1s0f0“和”enp1s0f1“:
[root@golem ~]# tuna --irq 'enp1s0f*' --socket 0 --spread --show_irqs # users affinity 69 enp1s0f0 0 igb 70 enp1s0f0-rx-0 1 igb 71 enp1s0f0-rx-1 2 igb 72 enp1s0f0-rx-2 3 igb 73 enp1s0f0-rx-3 4 igb 74 enp1s0f0-tx-0 5 igb 75 enp1s0f0-tx-1 6 igb 76 enp1s0f0-tx-2 7 igb 77 enp1s0f0-tx-3 0 igb 79 enp1s0f1 1 igb 80 enp1s0f1-rx-0 2 igb 81 enp1s0f1-rx-1 3 igb 82 enp1s0f1-rx-2 4 igb 83 enp1s0f1-rx-3 5 igb 84 enp1s0f1-tx-0 6 igb 85 enp1s0f1-tx-1 7 igb 86 enp1s0f1-tx-2 0 igb 87 enp1s0f1-tx-3 1 igb
對于擁有多塊 CPU 的系統,你可以把你喜歡的進程移到某塊 CPU 上,并且把網絡管理移到另一個上。
tuned
tuned 這個工具已經在 Red Hat 的多個發行版中可用。
tuned 帶有多種調優預置配置;用于各種通用服務器的合理的默認配置。用于“虛擬用戶”的配置,用于“虛擬主機”的配置,還有用于“高吞吐量”或者“低延遲”的預置配置。他們應該對更進一步的應用提供初始配置。例如:
[root@golem ~]# tuned-adm list - balanced - desktop - latency-performance - network-latency - network-throughput - powersave - throughput-performance - virtual-guest - virtual-host Current active profile: throughput-performance
不同的默認預置配置有著健全的文檔,而且如果你想自定義的話,有初始配置文件可供使用。
在物理機上默認的預置配置是“throughput-performance“或者”balanced“,在虛擬機上的默認預置配置是”virtual-guest“。
tuned 的默認預置配置在 /usr/lib/tuned 目錄下。
[root@golem ~]# tree /usr/lib/tuned /usr/lib/tuned |-- balanced | `-- tuned.conf |-- desktop | `-- tuned.conf |-- functions |-- latency-performance | `-- tuned.conf |-- network-latency | `-- tuned.conf |-- network-throughput | `-- tuned.conf |-- powersave | |-- script.sh | `-- tuned.conf |-- recommend.conf |-- throughput-performance | `-- tuned.conf |-- virtual-guest | `-- tuned.conf `-- virtual-host `-- tuned.conf
每個配置包括一個 tuned.conf 文件,這個文件帶有 INI 文件語義格式和一個可選的腳本解釋器。
如果想生成一個自定義的配置文件,你可以拷貝這些目錄里的一個文件到 /etc/tuned 目錄,做必要的修改并激活使用。
[root@golem ~]# cp -a /usr/lib/tuned/throughput-performance /etc/tuned/wonderprofile [root@golem ~]# vim /etc/tuned/wonderprofile/tuned.conf [root@golem ~]# tuned-adm profile wonderprofile
例如:/etc/tuned/wonderprofile/tuned.conf文件,對它進行少量調整。
[main] include=throughput-performance [sysctl] net.ipv4.tcp_rmem="4096 87380 16777216" net.ipv4.tcp_wmem="4096 16384 16777216" net.ipv4.udp_mem="3145728 4194304 16777216"
同樣對/etc/tuned/wonderprofile/script.sh進行調整。
#!/bin/sh # Lots of functions in here to use . /usr/lib/tuned/functions start() { [ "$USB_AUTOSUSPEND" = 1 ] && enable_usb_autosuspend enable_wifi_powersave return 0 } stop() { [ "$USB_AUTOSUSPEND" = 1 ] && disable_usb_autosuspend disable_wifi_powersave return 0 } process $@
拓展閱讀
我只是提及了很少的系統管理員工具。Red Hat 有豐富的文檔展示如何調優以及如何衡量(或者其它的方式),使用比我所提到的更多的工具。
對于電源管理方面,例如即使你忘了在家充電也可以使你的筆記本電腦在工作時間使用,請參見 Red Hat Enterprise Linux 7 Power Management Guide 。
對于性能調優,想使你的昂貴的服務器煥發更多的活力,參見 Red Hat Enterprise Linux 7 Performance Tuning Guide 。
”用微米測量,卻用粉筆標記,用斧子切割“ (警醒:不能犯這樣的錯誤。)