Linux 系统性能优化高级全流程指南

news2025/3/25 20:51:14

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; then
    tune2fs -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.sh

BEFORE_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.dat

gnuplot -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 Alerts
  rules:
  - alert: HighContextSwitch
    expr: rate(process_stat_context_switches_total[5m]) > 100000
    for: 10m
    annotations:
      description: '上下文切换过高:{{ $value }}次/秒'
  - alert: HighMemoryUsage
    expr: node_memory_MemUsed / node_memory_MemTotal * 100 > 90
    for: 10m
    annotations:
      description: '内存使用率过高:{{ $value }}%'
  - alert: HighDiskUsage
    expr: (node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_free_bytes{mountpoint="/"}) / node_filesystem_size_bytes{mountpoint="/"} * 100 > 90
    for: 10m
    annotations:
      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.coloradmin.cn/o/2320906.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SQL Server——表数据的插入、修改和删除

目录 一、引言 二、表数据的插入、修改和删除 &#xff08;一&#xff09;方法一&#xff1a;在SSMS控制台上进行操作 1.向表中添加数据 2.对表中的数据进行修改 3.对表中的数据进行删除 &#xff08;二&#xff09;方法二&#xff1a;使用 SQL 代码进行操作 1.向表中添…

deepSeek-SSE流式推送数据

1、背景 DeepSeek作为当前最火的AI大模型&#xff0c; 使用的时候用户在输入框输入问题&#xff0c;大模型进行思考回答你&#xff0c;然后会有一个逐步显示的过程效果&#xff0c;而不是一次性返回整个答案给前端页面进行展示&#xff0c;为了搞清楚其中的原理&#xff0c;我们…

【北京迅为】iTOP-RK3568开发板OpenHarmony系统南向驱动开发UART接口运作机制

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…

C#实现自己的Json解析器(LALR(1)+miniDFA)

C#实现自己的Json解析器(LALR(1)miniDFA) Json是一个用处广泛、文法简单的数据格式。本文介绍如何用bitParser&#xff08;拥有自己的解析器&#xff08;C#实现LALR(1)语法解析器和miniDFA词法分析器的生成器&#xff09;迅速实现一个简单高效的Json解析器。 读者可在&#xf…

机器学习——KNN数据均一化

在KNN&#xff08;K-近邻&#xff09;算法中&#xff0c;数据均一化&#xff08;归一化&#xff09;是预处理的关键步骤&#xff0c;用于消除不同特征量纲差异对距离计算的影响。以下是两种常用的归一化操作及其核心要点&#xff1a; 质押 一 、主要思想 1. 最值归一化&#…

异步编程与流水线架构:从理论到高并发

目录 一、异步编程核心机制解析 1.1 同步与异步的本质区别 1.1.1 控制流模型 1.1.2 资源利用对比 1.2 阻塞与非阻塞的技术实现 1.2.1 阻塞I/O模型 1.2.2 非阻塞I/O模型 1.3 异步编程关键技术 1.3.1 事件循环机制 1.3.2 Future/Promise模式 1.3.3 协程&#xff08;Cor…

哈尔滨工业大学DeepSeek公开课人工智能:大模型原理 技术与应用-从GPT到DeepSeek|附视频下载方法

导 读INTRODUCTION 今天继续哈尔滨工业大学车万翔教授带来了一场主题为“DeepSeek 技术前沿与应用”的报告。 本报告深入探讨了大语言模型在自然语言处理&#xff08;NLP&#xff09;领域的核心地位及其发展历程&#xff0c;从基础概念出发&#xff0c;延伸至语言模型在机器翻…

Excel处理控件Spire.XLS系列教程:C# 在 Excel 中添加或删除单元格边框

单元格边框是指在单元格或单元格区域周围添加的线条。它们可用于不同的目的&#xff0c;如分隔工作表中的部分、吸引读者注意重要的单元格或使工作表看起来更美观。本文将介绍如何使用 Spire.XLS for .NET 在 C# 中添加或删除 Excel 单元格边框。 安装 Spire.XLS for .NET E-…

Web开发-JS应用NodeJS原型链污染文件系统Express模块数据库通讯

知识点&#xff1a; 1、安全开发-NodeJS-开发环境&功能实现 2、安全开发-NodeJS-安全漏洞&案例分析 3、安全开发-NodeJS-特有漏洞 node.js就是专门运行javascript的一个应用程序&#xff0c;区别于以往用浏览器解析原生js代码&#xff0c;node.js本身就可以解析执行js代…

国产达梦(DM)数据库的安装(Linux系统)

目录 一、安装前的准备工作 1.1 导包 1.2 创建用户和组 1.3 修改文件打开最大数 1.4 目录规划 1.5 修改目录权限 二、安装DM8 2.1 挂载镜像 2.2 命令行安装 2.3 配置环境变量 2.4 启动图形化界面 三、配置实例 四、注册服务 五、启动 停止 查看状态 六、数据库客…

git的底层原理

git的底层原理 三段话总结git&#xff0c; 1. 工作原理&#xff1a;git管理是一个DAG有向无环图&#xff0c;HEAD指针指向branch或直接指向commit&#xff0c;branch指向commit&#xff0c;commit指向tree&#xff0c;tree指向别的tree或直接指向blob。 2. git所管理的一个目录…

MATLAB+Arduino利用板上的按键控制板上Led灯

几年不使用&#xff0c;之前的知识都忘掉了。需要逐步捡起来。 1 熟悉按键的使用 2熟悉灯的控制 1 电路 我们将通过 MATLAB 的 Arduino 支持包与 Arduino 板通信&#xff0c;读取按键状态并控制 LED 灯的亮灭。 按键&#xff1a;连接到 Arduino 的数字引脚&#xff08;例如…

Cocos Creator Shader入门实战(五):材质的了解、使用和动态构建

引擎&#xff1a;3.8.5 您好&#xff0c;我是鹤九日&#xff01; 回顾 前面的几篇文章&#xff0c;讲述的主要是Cocos引擎对Shader使用的一些固定规则&#xff0c;这里汇总下&#xff1a; 一、Shader实现基础是OpenGL ES可编程渲染管线&#xff0c;开发者只需关注顶点着色器和…

vue设置自定义logo跟标题

准备 Logo 图片 将自定义的 Logo 图片&#xff08;如 logo.png&#xff09;放置在项目的 public文件夹下。 使用环境变量设置 Logo 和标题&#xff08;可选&#xff09; 创建或修改 .env 文件 在项目根目录下创建或修改 .env 文件&#xff0c;添加以下内容&#xff1a; VITE_A…

尝试在软考65天前开始成为软件设计师-计算机网络

OSI/RM 七层模型 层次名功能主要协议7应用层实现具体应用功能 FTP(文件传输)、HTTP、Telnet、 POP3(邮件)SMTP(邮件) ------- DHCP、TFTP(小文件)、 SNMP、 DNS(域名) 6表示层数据格式,加密,压缩.....5会话层建立,管理&终止对话4传输层端到端连接TCP,UDP3网络层分组传输&a…

VMware主机换到高配电脑,高版本系统的问题

原来主机是i3 ,windows7系统&#xff0c;vmware 14.0,虚机系统是ubuntu 14.04。目标新机是i7 14700KF,windows11系统。原以为安装虚拟机&#xff0c;将磁盘文件&#xff0c;虚拟机配置文件拷贝过去可以直接用。 新目标主机先安装了vmware 15&#xff0c;运行原理虚机&#xff0…

【Linux内核系列】:动静态库详解

&#x1f525; 本文专栏&#xff1a;Linux &#x1f338;作者主页&#xff1a;努力努力再努力wz &#x1f4aa; 今日博客励志语录&#xff1a; 有些鸟儿是注定是关不住的&#xff0c;因为它们的每一片羽翼都沾满了自由的光辉 ★★★ 本文前置知识&#xff1a; 编译与链接的过程…

windows环境下NER Python项目环境配置(内含真的从头安的perl配置)

注意 本文是基于完整项目的环境配置&#xff0c;即本身可运行项目你拿来用 其中有一些其他问题&#xff0c;知道的忽略即可 导入pycharm基本包怎么下就不说了&#xff08;这个都问&#xff1f;给你一拳o(&#xff40;ω*)o&#xff09; 看perl跳转第5条 1.predict报错多个设备…

IDEA批量替换项目下所有文件中的特定内容

文章目录 1. 问题引入2. 批量替换项目下所有文件中的特定内容2.1 右键项目的根目录&#xff0c;点击在文件中替换2.2 输入要替换的内容 3. 解决替换一整行文本后出现空行的问题4. 增加筛选条件提高匹配的精确度 更多 IDEA 的使用技巧可以查看 IDEA 专栏&#xff1a; IDEA 1. 问…

【蓝桥杯】4535勇闯魔堡(多源BFS + 二分)

思路 k有一个范围&#xff08;0到怪物攻击的最大值&#xff09;&#xff0c;求满足要求的k的最小值。很明显的二分套路。 关键是check函数怎么写&#xff0c;我们需要找到一条从第一行到最后一行的路径&#xff0c;每一次可以从上下左右四个方向前进&#xff0c;那么我么可以用…