Linux 系統性能優化高級全流程指南

Linux 系統性能優化高級全流程指南

一、系統基礎狀態捕獲

1. 系統信息建檔

除了原有的硬件、內核和存儲拓撲信息收集,還增加 CPU 緩存、網絡設備詳細信息等。

# 硬件信息
lscpu > /opt/tuning/lscpu.origin
dmidecode -t memory > /opt/tuning/meminfo.origin
lspci -vvv > /opt/tuning/pci.origin
getconf -a | grep CACHE > /opt/tuning/cache_info.origin  # 獲取 CPU 緩存信息# 內核信息
uname -a > /opt/tuning/kernel.origin
sysctl -a > /opt/tuning/sysctl.origin# 存儲拓撲
lsblk -O > /opt/tuning/lsblk.origin
nvme list > /opt/tuning/nvme.origin# 網絡設備信息
ethtool eth0 > /opt/tuning/eth0_info.origin  # 假設網卡為 eth0

2. 性能基線測試

增加更多維度的性能測試,如 CPU 多核性能、內存帶寬測試等。

# CPU 單核性能(計算素數)
sysbench cpu --cpu-max-prime=20000 run | tee /opt/tuning/cpu_origin.log# CPU 多核性能
sysbench cpu --cpu-max-prime=20000 --threads=$(nproc) run | tee /opt/tuning/cpu_multi_origin.log# 內存延遲測試
sudo apt-get install lmbench -y
lat_mem_rd 1G 512 | tee /opt/tuning/mem_latency.origin# 內存帶寬測試
stream | tee /opt/tuning/mem_bandwidth.origin# 磁盤隨機 IOPS(混合讀寫)
fio --name=baseline --rw=randrw --bs=4k --direct=1 --runtime=60 \
--iodepth=64 --ioengine=libaio --group_reporting | tee /opt/tuning/fio_origin.log# 網絡基礎吞吐
iperf3 -c 10.0.0.2 -t 30 -P 8 | tee /opt/tuning/iperf_origin.log

二、分項優化與驗證

1. 內核參數調優

除了原有的 TCP 相關參數,調整更多內核參數以優化系統整體性能。

# 原始狀態捕獲
sysctl -n net.ipv4.tcp_tw_reuse
sysctl -n net.ipv4.tcp_fin_timeout
sysctl -n vm.swappiness
ss -s | grep TIMEWAIT# 優化操作
echo "net.ipv4.tcp_tw_reuse = 1" >> /etc/sysctl.conf
echo "net.ipv4.tcp_fin_timeout = 15" >> /etc/sysctl.conf
echo "vm.swappiness = 10" >> /etc/sysctl.conf
sysctl -p# 驗證測試
wrk -t12 -c4000 -d60s http://target:8080
watch -n1 "ss -s | grep TIMEWAIT"
vmstat 1 10  # 觀察交換情況

2. 文件系統優化

除了修改掛載參數,還可以根據文件系統類型進行針對性優化。

# 原始測試
mount | grep " / " > /opt/tuning/mount.origin
fio --name=testfs --directory=/mnt/data --rw=randwrite \
--bs=4k --numjobs=16 --time_based --runtime=300 \
--group_reporting | tee /opt/tuning/fio_fs_origin.log# 優化操作
if grep -q ext4 /etc/fstab; thentune2fs -o journal_data_writeback /dev/sda1  # 假設掛載在 /dev/sda1
fi
vim /etc/fstab
# 修改為:noatime,nodiratime,data=writeback,barrier=0
umount /mnt/data && mount -a# 驗證測試
fio --name=testfs_tuned --directory=/mnt/data --rw=randwrite \
--bs=4k --numjobs=16 --time_based --runtime=300 \
--group_reporting | tee /opt/tuning/fio_fs_tuned.log
diff -y <(awk '/IOPS/' fio_fs_origin.log) <(awk '/IOPS/' fio_fs_tuned.log)

3. 網絡棧優化

除了調整 TCP 參數,還可以優化網絡設備隊列和中斷綁定。

# 原始抓包分析
tcpdump -i eth0 -w tcp_handshake.pcap 'tcp port 80 and tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-syn'
tshark -r tcp_handshake.pcap -T fields -e tcp.time_delta | sort -n > tcp_delay.origin# 優化操作
echo "net.ipv4.tcp_slow_start_after_idle = 0" >> /etc/sysctl.conf
echo "net.ipv4.tcp_adv_win_scale = 1" >> /etc/sysctl.conf
ethtool -L eth0 combined $(nproc)  # 調整網卡隊列數
for i in $(ls /sys/class/net/eth0/queues/rx-*/rps_cpus); do echo ffff > $i; done  # 配置 RPS
sysctl -p# 驗證測試
ab -n 100000 -c 500 -k http://target:8080/ | tee /opt/tuning/ab_tuned.log
awk '/Requests per second/ {print $4}' ab_origin.log ab_tuned.log | \
gnuplot -p -e 'plot "-" using 0:1 with lines title "QPS"; pause -1'

三、自動化對比腳本

完善自動化對比腳本,增加更多性能指標的對比。

#!/bin/bash
# perf_compare.shBEFORE_LOG=$1
AFTER_LOG=$2# CPU 性能對比
before_cpu=$(grep "events per second" $BEFORE_LOG/cpu_origin.log | awk '{print $4}')
after_cpu=$(grep "events per second" $AFTER_LOG/cpu_origin.log | awk '{print $4}')
cpu_gain=$(echo "scale=2; ($after_cpu - $before_cpu)/$before_cpu*100" | bc)before_cpu_multi=$(grep "events per second" $BEFORE_LOG/cpu_multi_origin.log | awk '{print $4}')
after_cpu_multi=$(grep "events per second" $AFTER_LOG/cpu_multi_origin.log | awk '{print $4}')
cpu_multi_gain=$(echo "scale=2; ($after_cpu_multi - $before_cpu_multi)/$before_cpu_multi*100" | bc)# 內存延遲對比
before_mem=$(grep "0.00625" $BEFORE_LOG/mem_latency.origin | awk '{print $2}')
after_mem=$(grep "0.00625" $AFTER_LOG/mem_latency.origin | awk '{print $2}')# 內存帶寬對比
before_mem_bw=$(grep "Copy" $BEFORE_LOG/mem_bandwidth.origin | awk '{print $2}')
after_mem_bw=$(grep "Copy" $AFTER_LOG/mem_bandwidth.origin | awk '{print $2}')
mem_bw_gain=$(echo "scale=2; ($after_mem_bw - $before_mem_bw)/$before_mem_bw*100" | bc)# 生成報告
cat << EOF
[性能對比報告]
CPU 單核計算能力提升: ${cpu_gain}%
CPU 多核計算能力提升: ${cpu_multi_gain}%
內存訪問延遲變化: ${before_mem}ns -> ${after_mem}ns
內存帶寬提升: ${mem_bw_gain}%磁盤隨機寫 IOPS:
- 優化前: $(grep write $BEFORE_LOG/fio_origin.log | cut -d= -f2)
- 優化后: $(grep write $AFTER_LOG/fio_origin.log | cut -d= -f2)網絡吞吐量提升:
$(paste $BEFORE_LOG/iperf_origin.log $AFTER_LOG/iperf_origin.log | column -t)
EOF

四、可視化分析方法

1. 使用 gnuplot 繪制性能對比

除了 CPU 使用率對比,增加內存使用率、磁盤 I/O 等對比。

# CPU 使用率對比(sar 數據)
sar -f sar_origin.log -u | awk 'NR>3 {print $1,$3+$5}' > cpu_origin.dat
sar -f sar_tuned.log -u | awk 'NR>3 {print $1,$3+$5}' > cpu_tuned.dat# 內存使用率對比
sar -f sar_origin.log -r | awk 'NR>3 {print $1,$4}' > mem_origin.dat
sar -f sar_tuned.log -r | awk 'NR>3 {print $1,$4}' > mem_tuned.dat# 磁盤 I/O 對比
sar -f sar_origin.log -d | awk 'NR>3 {print $1,$3}' > disk_origin.dat
sar -f sar_tuned.log -d | awk 'NR>3 {print $1,$3}' > disk_tuned.datgnuplot -persist << EOF
set multiplot layout 3,1
set title "CPU Utilization Comparison"
set xlabel "Time"
set ylabel "Usage %"
plot "cpu_origin.dat" with lines title "Original", \"cpu_tuned.dat" with lines title "Tuned"set title "Memory Utilization Comparison"
set xlabel "Time"
set ylabel "Usage %"
plot "mem_origin.dat" with lines title "Original", \"mem_tuned.dat" with lines title "Tuned"set title "Disk I/O Comparison"
set xlabel "Time"
set ylabel "IOPS"
plot "disk_origin.dat" with lines title "Original", \"disk_tuned.dat" with lines title "Tuned"
unset multiplot
EOF

2. 火焰圖對比分析

增加更多維度的火焰圖分析,如內存分配、I/O 操作等。

# 采集優化前數據
perf record -F 99 -ag -- sleep 30
mv perf.data perf.origin.data
perf record -e mem-stores -F 99 -ag -- sleep 30
mv perf.data perf.mem.origin.data
perf record -e block:block_rq_issue -F 99 -ag -- sleep 30
mv perf.data perf.io.origin.data# 采集優化后數據
perf record -F 99 -ag -- sleep 30
mv perf.data perf.tuned.data
perf record -e mem-stores -F 99 -ag -- sleep 30
mv perf.data perf.mem.tuned.data
perf record -e block:block_rq_issue -F 99 -ag -- sleep 30
mv perf.data perf.io.tuned.data# 生成對比視圖
difffolded.pl perf.origin.data perf.tuned.data | flamegraph.pl > diff.svg
difffolded.pl perf.mem.origin.data perf.mem.tuned.data | flamegraph.pl > diff_mem.svg
difffolded.pl perf.io.origin.data perf.io.tuned.data | flamegraph.pl > diff_io.svg

五、深度監控指標

1. 實時監控看板

使用 Grafana 和 Prometheus 搭建更強大的監控系統。

# 安裝 Prometheus 和 Grafana
sudo apt-get install prometheus grafana -y# 配置 Prometheus 監控節點
vim /etc/prometheus/prometheus.yml
# 添加以下內容
scrape_configs:- job_name: 'node'static_configs:- targets: ['localhost:9100']# 啟動 Prometheus 和 Grafana
sudo systemctl start prometheus grafana-server
sudo systemctl enable prometheus grafana-server# 導入 Grafana 儀表盤模板
# 訪問 http://localhost:3000,添加 Prometheus 數據源,導入預定義的儀表盤模板

2. 關鍵性能指標告警

完善 Prometheus 告警規則,增加更多告警指標。

# 使用 prometheus 配置規則
groups:
- name: Tuning Alertsrules:- alert: HighContextSwitchexpr: rate(process_stat_context_switches_total[5m]) > 100000for: 10mannotations:description: '上下文切換過高:{{ $value }}次/秒'- alert: HighMemoryUsageexpr: node_memory_MemUsed / node_memory_MemTotal * 100 > 90for: 10mannotations:description: '內存使用率過高:{{ $value }}%'- alert: HighDiskUsageexpr: (node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_free_bytes{mountpoint="/"}) / node_filesystem_size_bytes{mountpoint="/"} * 100 > 90for: 10mannotations:description: '磁盤使用率過高:{{ $value }}%'

六、優化回滾機制

1. 內核參數回滾

# 備份原始配置
cp /etc/sysctl.conf /etc/sysctl.conf.bak_$(date +%s)# 快速回滾命令
sysctl -p /etc/sysctl.conf.bak

2. 文件系統回滾

# 使用 btrfs 快照
btrfs subvolume list /
btrfs subvolume set-default <原快照 ID> /
reboot

3. 網絡棧配置回滾

# 備份網絡配置
cp /etc/sysctl.conf /etc/sysctl.conf.net_bak_$(date +%s)
cp /etc/network/interfaces /etc/network/interfaces.bak_$(date +%s)# 回滾網絡配置
sysctl -p /etc/sysctl.conf.net_bak
cp /etc/network/interfaces.bak /etc/network/interfaces
reboot

通過以上更全面、更深入的優化方案,可以更細致地對 Linux 系統進行性能優化,并實時監控優化效果,確保系統始終處于最佳運行狀態。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/74338.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/74338.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/74338.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

常?中間件漏洞--Tomcat

tomcat是?個開源?且免費的jsp服務器&#xff0c;默認端? : 8080&#xff0c;屬于輕量級應?服務器。它可以實現 JavaWeb程序的裝載&#xff0c;是配置JSP&#xff08;Java Server Page&#xff09;和JAVA系統必備的?款環境。 1.CVE-2017-12615 Tomcat put?法任意?件寫…

數據結構之棧(C語言)

數據結構之棧&#xff08;C語言&#xff09; 棧1 棧的概念與結構2 棧的初始化和銷毀2.1 棧的初始化2.2 棧的銷毀 3 入棧函數與出棧函數3.1 入棧函數3.2 出棧函數 4 取棧頂數據&#xff0c;獲取數據個數 和 判空函數4.1 取棧頂數據與獲取數據個數4.1.1 取棧頂數據4.1.2 獲取數據…

datawhale組隊學習--大語言模型—task4:Transformer架構及詳細配置

第五章 模型架構 在前述章節中已經對預訓練數據的準備流程&#xff08;第 4 章&#xff09;進行了介紹。本章主 要討論大語言模型的模型架構選擇&#xff0c;主要圍繞 Transformer 模型&#xff08;第 5.1 節&#xff09;、詳細 配置&#xff08;第 5.2 節&#xff09;、主流架…

BP神經網絡+NSGAII算法(保真)

BP神經網絡NSGAII算法 非常適合用來當作實驗驗證自己的結論&#xff0c;構建一個神經網絡模型&#xff0c;并使用NSGAII多目標優化算法來實現多領域的畢業論文的設計。僅僅使用簡單的matlab代碼就可以實現自己的多目標優化任務。 BP神經網絡算法 我的任務是預測三個變量的值…

MCU vs SoC

MCU&#xff08;Microcontroller Unit&#xff0c;單片機&#xff09;和SoC&#xff08;System on Chip&#xff0c;片上系統&#xff09;是兩種不同的芯片類型&#xff0c;盡管它們都實現了高度集成&#xff0c;但在設計目標、功能復雜性和應用場景上存在顯著差異。以下是兩者…

3.23學習總結

字符串 String java.lang,String 類代表字符串&#xff0c;Java程序中所有的字符串文字都為此類的對象 字符串的內容是不會發生改變的&#xff0c;它的對象在創建之后不能唄更改 字符串的內存模型 當使用雙引號直接賦值時&#xff0c;系統會檢查該字符串在串池中是否存在。 …

01測試分類

一、按照測試目標分類 1、界面測試 肉眼所看到的一切&#xff0c;都需要進行測試。如&#xff0c;按鈕的點擊&#xff1b;輸入框輸入文本&#xff1b;下拉框的選擇&#xff1b;其它的交互等。。。 前端開發在執行開發之前需要交互/設計的同學給出設計圖&#xff08;以圖片的…

【Git】用Git命令克隆一個遠程倉庫、修改倉庫中的文件,并將更改推送到遠程倉庫

git clone ssh://gitgithub.com:2222/Mermaid28/Groove.git # SSH地址cd rfnvtoolecho "# rfnvtool" > README.md git add README.mdgit commit -m "add README" git push -u origin master 這個一系列的 Git 命令涉及到克隆一個遠程倉庫、修改倉庫中…

關于MTU的使用(TCP/IP網絡下載慢可能與此有關)

參考鏈接&#xff1a;告訴你mtu值怎么設置才能網速最好&#xff01; -Win7系統之家 出現網絡速度被限制&#xff0c;可能與MTU值相關&#xff0c;先查看下本機的MTU winR,然后輸入&#xff1a;netsh interface ipv4 show subinterfaces &#xff0c;查看自己網絡中的MTU&…

07_GRU模型

GRU模型 雙向GRU筆記:https://blog.csdn.net/weixin_44579176/article/details/146459952 概念 GRU&#xff08;Gated Recurrent Unit&#xff09;也稱為門控循環單元&#xff0c;是一種改進版的RNN。與LSTM一樣能夠有效捕捉長序列之間的語義關聯&#xff0c;通過引入兩個&qu…

Playwright + MCP:用AI對話重新定義瀏覽器自動化,效率提升300%!

一、引言&#xff1a;自動化測試的“瓶頸”與MCP的革新 傳統自動化測試依賴開發者手動編寫腳本&#xff0c;不僅耗時且容易因頁面動態變化失效。例如&#xff0c;一個簡單的登錄流程可能需要開發者手動定位元素、處理等待邏輯&#xff0c;甚至反復調試超時問題。而MCP&#xf…

網絡爬蟲-4:jsonpath+實戰

1.jsonpath 2.通過jsonpath實戰 一.Jasonpath核心符號 1)$: 含義&#xff1a;表示 JSON 文檔的根節點。 用法&#xff1a;所有 JSONPath 表達式都以 $ 開頭&#xff0c;表示從根節點開始查詢。 {"store": {"book": [{"title": "Book 1&…

GD32 ARM單片機開發規范檢查清單 GD32嵌入式C代碼檢查清單

GD32 ARM單片機開發規范檢查清單 以下檢查清單基于您的編程規范制定&#xff0c;可用于代碼審查和自檢過程。通過逐項檢查&#xff0c;確保代碼符合項目規范要求。 #mermaid-svg-Ye0FEIS4ZoXDXqaH {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:…

求職招聘網站源碼,找工作招工系統,支持H5和各種小程序

招聘找活招工平臺系統源碼 招聘求職找工作軟件 發布信息積分充值招聘系統,里面帶纖細教程 功能介紹: 招工小程序主要針對工地招工工人找工作,工地可以發布招工信息,工人可以發布找活信息,招工信息可以置頂,置頂需要積分,積分可以通過簽到、分享邀請好友、充值獲取,后…

《Oracle DBA入門實戰:十大高頻問題詳解與避坑指南》

Oracle DBA 入門作業十問十答 本文為 Oracle DBA 入門作業整理&#xff0c;涵蓋工具使用、配置管理及權限控制等核心知識點&#xff0c;適合新手快速上手。 如有疑問或補充&#xff0c;歡迎評論區交流&#xff01; 1. DBA 常用工具有哪些&#xff1f; Oracle Universal Instal…

解決用戶同時登錄輪詢獲取用戶信息錯亂,使用WebSocket和Server-Sent Events (SSE)

為什么更推薦WebSocket Server-Sent Events (SSE) 是一種服務器向客戶端推送數據的單向通信協議&#xff0c;適合某些場景&#xff0c;在解決用戶同時登錄和實時獲取用戶信息的問題上&#xff0c;WebSocket 是更好的選擇。 1. SSE 的局限性 單向通信 SSE 是單向的&#xff0…

發票查驗/發票驗真如何用Java實現接口調用

一、什么是發票查驗&#xff1f;發票驗真接口&#xff1f; 輸入發票基本信息發票代碼、發票號碼、開票日期、校驗碼后6位、不含稅金額、含稅金額&#xff0c;核驗發票真偽。 該接口也適用于機動車、二手車銷售發票、航空運輸電子客票、鐵路電子客票等。 二、如何用Java實現接口…

html5-qrcode前端打開攝像頭掃描二維碼功能

實現的效果如圖所示&#xff0c;全屏打開并且掃描到二維碼后彈窗提醒&#xff0c;主要就是使用html5-qrcode這個依賴庫&#xff0c;html5-qrcode開源地址&#xff1a;GitHub - mebjas/html5-qrcode: A cross platform HTML5 QR code reader. See end to end implementation at:…

cpp-友元

理解 C 中的友元&#xff08;Friend&#xff09; 在 C 語言中&#xff0c;封裝&#xff08;Encapsulation&#xff09; 是面向對象編程的重要特性之一。它允許類將數據隱藏在私有&#xff08;private&#xff09;或受保護&#xff08;protected&#xff09;成員中&#xff0c;…

JavaWeb基礎-HTTP協議、請求協議、響應協議

一. HTTP協議 1. HTTP協議&#xff1a;Hyper Text Transfer Protocol&#xff0c;超文本傳輸協議&#xff0c;規定了瀏覽器和服務器之間數據傳輸的規則 2. HTTP協議特點&#xff1a; ① 基于TCP協議&#xff1a;面向鏈接&#xff0c;安全 ② 基于請求-響應模型的&#xff1a;一…