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.mzph.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;一…