您好,登錄后才能下訂單哦!
一.硬件優化
系統運行的速度是由系統中最慢的設備來決定。
選擇固態硬盤:
TLC SLC(最好)MLC
優化的時候,優化離cpu最近的設備
CPU --> CACHE
主頻:倍頻 * FSB
CACHE: 高速緩沖器,提高應用程序的命中率.L1(數據區,指令區)獨立->L2 獨立->L3 共享
優化思路:想方設法讓應用數據停留在cache中更長的時間。
應用運行過程:
DISK --> MEM --> cache --> CPU
DISK:優化IO算法
SSD: SATA3 --> PCIe --> NVMe
二.系統層面
1.常用命令
(1).ps
自定義顯示進程列
# ps axo pid,comm,pcpu
(2).vmstat
# vmstat 1 2 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 3 0 148 284184 212 663928 0 0 12 5 81 121 0 0 99 0 0 0 0 148 284060 212 663928 0 0 0 0 96 126 0 0 100 0 0 r 表示運行隊列(就是說多少個進程真的分配到CPU),我測試的服務器目前CPU比較空閑,沒什么程序在跑,當這個值超過了CPU數目,就會出現CPU瓶頸了。這個也和top的負載有關系,一般負載超過了3就比較高,超過了5就高,超過了10就不正常了,服務器的狀態很危險。top的負載類似每秒的運行隊列。如果運行隊列過大,表示你的CPU很繁忙,一般會造成CPU使用率很高。 b 表示阻塞的進程,這個不多說,進程阻塞,大家懂的。 swpd 虛擬內存已使用的大小,如果大于0,表示你的機器物理內存不足了,如果不是程序內存泄露的原因,那么你該升級內存了或者把耗內存的任務遷移到其他機器。 free 空閑的物理內存的大小,我的機器內存總共8G,剩余3415M。 buff Linux/Unix系統是用來存儲,目錄里面有什么內容,權限等的緩存,我本機大概占用300多M cache cache直接用來記憶我們打開的文件,給文件做緩沖,我本機大概占用300多M(這里是Linux/Unix的聰明之處,把空閑的物理內存的一部分拿來做文件和目錄的緩存,是為了提高 程序執行的性能,當程序使用內存時,buffer/cached會很快地被使用。) si 每秒從磁盤讀入虛擬內存的大小,如果這個值大于0,表示物理內存不夠用或者內存泄露了,要查找耗內存進程解決掉。我的機器內存充裕,一切正常。 so 每秒虛擬內存寫入磁盤的大小,如果這個值大于0,同上。 bi 塊設備每秒接收的塊數量,這里的塊設備是指系統上所有的磁盤和其他塊設備,默認塊大小是1024byte,我本機上沒什么IO操作,所以一直是0,但是我曾在處理拷貝大量數據(2-3T)的機器上看過可以達到140000/s,磁盤寫入速度差不多140M每秒 bo 塊設備每秒發送的塊數量,例如我們讀取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO過于頻繁,需要調整。 in 每秒CPU的中斷次數,包括時間中斷 cs 每秒上下文切換次數,例如我們調用系統函數,就要進行上下文切換,線程的切換,也要進程上下文切換,這個值要越小越好,太大了,要考慮調低線程或者進程的數目,例如在apache和nginx這種web服務器中,我們一般做性能測試時會進行幾千并發甚至幾萬并發的測試,選擇web服務器的進程可以由進程或者線程的峰值一直下調,壓測,直到cs到一個比較小的值,這個進程和線程數就是比較合適的值了。系統調用也是,每次調用系統函數,我們的代碼就會進入內核空間,導致上下文切換,這個是很耗資源,也要盡量避免頻繁調用系統函數。上下文切換次數過多表示你的CPU大部分浪費在上下文切換,導致CPU干正經事的時間少了,CPU沒有充分利用,是不可取的。 us 用戶CPU時間,我曾經在一個做加密解密很頻繁的服務器上,可以看到us接近100,r運行隊列達到80(機器在做壓力測試,性能表現不佳)。 sy 系統CPU時間,如果太高,表示系統調用時間長,例如是IO操作頻繁。 id 空閑 CPU時間,一般來說,id + us + sy = 100,一般我認為id是空閑CPU使用率,us是用戶CPU使用率,sy是系統CPU使用率。 wt 等待IO CPU時間。
(3).iostat
# iostat Linux 3.10.0-693.el7.x86_64 (rh2) 08/02/2018 _x86_64_ (1 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.20 0.01 0.32 0.01 0.00 99.46 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 0.87 12.23 5.24 898971 385228 scd0 0.00 0.01 0.00 1054 0 dm-0 0.86 11.76 5.21 864302 383008 dm-1 0.00 0.03 0.00 2228 152
avg-cpu:
選項 | 說明 |
---|---|
%user | CPU在用戶態執行進程的時間百分比。 |
%nice | CPU在用戶態模式下,用于nice操作,所占用CPU總時間的百分比 |
%system | CPU處在內核態執行進程的時間百分比 |
%iowait | CPU用于等待I/O操作占用CPU總時間的百分比 |
%steal | 管理程序(hypervisor)為另一個虛擬進程提供服務而等待虛擬CPU的百分比 |
%idle | CPU空閑時間百分比 |
Device:
選項 | 說明 |
---|---|
Device | 設備名稱 |
tps | 每秒向磁盤設備請求數據的次數,包括讀、寫請求,為rtps與wtps的和。出于效率考慮,每一次IO下發后并不是立即處理請求,而是將請求合并(merge),這里tps指請求合并后的請求計數。 |
Blk_read/s | Indicate the amount of data read from the device expressed in a number of blocks per second. Blocks are equivalent to sectors with kernels 2.4 and later and therefore have a size of 512 bytes. With older kernels, a block is of indeterminate size. |
Blk_wrtn/s | Indicate the amount of data written to the device expressed in a number of blocks per second. |
Blk_read | 取樣時間間隔內讀扇區總數量 |
Blk_wrtn | 取樣時間間隔內寫扇區總數量 |
# iostat -x Linux 3.10.0-693.el7.x86_64 (rh2) 08/02/2018 _x86_64_ (1 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.20 0.01 0.32 0.01 0.00 99.46 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 0.02 0.24 0.63 12.23 5.24 40.10 0.00 0.88 1.18 0.77 0.31 0.03 scd0 0.00 0.00 0.00 0.00 0.01 0.00 68.00 0.00 0.35 0.35 0.00 0.35 0.00 dm-0 0.00 0.00 0.21 0.64 11.75 5.21 39.57 0.00 0.94 1.33 0.80 0.31 0.03 dm-1 0.00 0.00 0.00 0.00 0.03 0.00 36.06 0.00 7.01 0.05 24.21 1.21 0.00
選項 | 說明 |
---|---|
rrqm/s | 每秒對該設備的讀請求被合并次數,文件系統會對讀取同塊(block)的請求進行合并 |
wrqm/s | 每秒對該設備的寫請求被合并次數 |
r/s | 每秒完成的讀次數 |
w/s | 每秒完成的寫次數 |
rkB/s | 每秒讀數據量(kB為單位) |
wkB/s | 每秒寫數據量(kB為單位) |
avgrq-sz | 平均每次IO操作的數據量(扇區數為單位) |
avgqu-sz | 平均等待處理的IO請求隊列長度 |
await | 平均每次IO請求等待時間(包括等待時間和處理時間,毫秒為單位) |
svctm | 平均每次IO請求的處理時間(毫秒為單位) |
%util | 采用周期內用于IO操作的時間比率,即IO隊列非空的時間比率 |
(4).mpstat
查看多核cpu ,可以顯示每個核心cpu的運行情況。 vmstat 只能顯示總體的cpu
# mpstat -P ALL Linux 3.10.0-693.el7.x86_64 (rh2) 08/02/2018 _x86_64_ (1 CPU) 10:13:33 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 10:13:33 PM all 0.20 0.01 0.32 0.01 0.00 0.01 0.00 0.00 0.00 99.46 10:13:33 PM 0 0.20 0.01 0.32 0.01 0.00 0.01 0.00 0.00 0.00 99.46
(5).
# time ls
real 0m0.006s
user 0m0.000s
sys 0m0.005s
* 0.001s 為等待時間
(6).sar
sar 日志存儲目錄
cd /var/log/sa
# sar -f sa31 #默認cpu # sar -f sa31 -b #查看磁盤 # sar -q -f sa31 #查看隊列 # sar -q -f sa31 |awk '{print $3}' |sort -unr #最大隊列的進程號 # sar -d -p -f sa31 |awk '{print $2,$4}' |grep ^sd |sort -unr #哪個設備的讀取速率最高 # sar -n DEV #查看網絡吞吐量 # sar -r 1 1 #內存和swap使用情況
(7).dmidecode
查看詳細的硬件信息
(8).lspci,lscpu,lsusb,lsscsi,lsblk
查看各種硬件信息命令
(9).dmesg
- 記錄系統啟動時候的硬件相關信息,啟動后該日志文件不再更新
/var/log/dmesg
- 查看系統啟動后加載的硬件信息,需要查看dmesg
2.sysctl
(1).sysctl -a #顯示當前可調整的所有參數
(2).修改配置文件,調整參數
vim /etc/sysctl.conf 老版本
vim /etc/sysctl.d/10-sysctl.conf 新版本
(3).sysctl -p /etc/sysctl.d/10-sysctl.conf
使參數永久生效
3.swap
swap可以是文件也可以是磁盤分區,最多可以有32個,每個最大64G
性能考慮:
避免 swap 文件
將 swap 分區分速度快的介質上
多個小的 swap 效果要比一個大的 swap 效果好 設置 swap 優先級別
4.內核IO調度器
-NooP Scheduler
適用于隨機訪問設備,如閃盤 FIFO ,基本合并與排序 適用于嵌入式操作系統
-Anticipatory I/O Scheduler
內核默認的調度器
不適用于數據吞吐量大的數據庫系統
-DeadLine Io調度器
提升 IO 性能的同時避免 IO等待
保證既定的IO請求最小的延遲時間
-CFQ I/O Schedulere
RHEL 默認的調度器 IO請求輪詢進行,為應用平均分配帶寬,提供一個平等的工作環境
(1).臨時修改
[root@rh2 ~]# cat /sys/block/sda/queue/scheduler
noop [deadline] cfq
[root@rh2 ~]# echo cfq>/sys/block/sda/queue/scheduler
[root@rh2 ~]# cat /sys/block/sda/queue/scheduler
noop deadline [cfq]
(2).修改所有的配置
修改 grub.conf #boot=/dev/hda default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title Red Hat Enterprise Linux Server (2.6.18-8.el5) root (hd0,0) kernel /vmlinuz-2.6.18-8.el5 ro root=LABEL=/ rhgb quiet elevator=deadline initrd /initrd-2.6.18-8.el5.img
(3).tuned-adm
5.內存優化
相關參數:
vm.dirty_expire_centisecs = 3000 #舊數據的回寫時間,30秒后臟頁要回寫到磁盤 vm.dirty_background_ratio = 10 #整個系統臟頁百分比超過10,則進行刷臟頁 vm.dirty_ratio = 30 #整個臟頁達到內存的30%時,則進行刷臟頁 vm.dirty_writeback_centisecs = 500 #刷新臟數據進程的時間間隔 vm.swappiness=30 #使用內存還是swap的傾向值
6.網絡優化
BDP 帶寬延遲乘積
計算公式(字節) = 帶寬(MB)x 延時 (s)x1024x1024/8
相關參數:
net.ipv4.tcp_mem = 194976 259968 389952 net.ipv4.tcp_wmem = 4096 16384 4194304 net.ipv4.tcp_rmem = 4096 87380 4194304 net.ipv4.udp_mem = 194976 259968 389952 net.core.wmem_max = 131071 net.core.rmem_max = 131071 net.core.wmem_default = 110592 net.core.rmem_default = 110592
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。