目录

一、性能优化概述

二、性能监控工具

1. 基础工具

2. 高级工具

三、子系统优化策略

1. CPU优化

2. 内存优化

3. 磁盘I/O优化

4. 网络优化

四、资源限制优化

1. ulimit

2. cgroups(控制组)

五、安全与注意事项

六、综合案例

案例1:TCP连接数过高导致Web服务卡顿

问题描述

优化配置

验证方法

案例2:Java应用内存溢出导致系统崩溃

问题描述

优化配置

验证方法

案例3:磁盘I/O延迟导致数据库性能下降

问题描述

优化配置

验证方法

案例4:CPU竞争导致多线程应用性能差

问题描述

优化配置

验证方法

案例5:网络丢包导致视频流传输卡顿

问题描述

优化配置

验证方法

总结:优化配置原则


一、性能优化概述

  1. 目标:提升系统响应速度、资源利用率,避免瓶颈。

  2. 核心原则

    • 监控先行:先分析瓶颈,再针对性优化。

    • 逐步调整:避免一次性修改过多参数。

    • 稳定性优先:优化后需充分测试。


二、性能监控工具

1. 基础工具

  • top / htop

    top          # 实时查看CPU、内存、进程
    htop         # 增强版(支持鼠标操作)
    • 关键指标%CPU(CPU占用)、%MEM(内存占用)、LOAD AVERAGE(系统负载)。

  • vmstat

    vmstat 1     # 每秒输出一次系统状态
    • 关键列

      • r:等待CPU的进程数(> CPU核数表示过载)。

      • si/so:Swap交换频率(频繁交换说明内存不足)。

  • iostat

    iostat -xz 1 # 查看磁盘I/O
    • 关键指标%util(磁盘利用率 >80% 表示瓶颈)、await(I/O等待时间)。

  • netstat / ss

    netstat -ant | grep ESTABLISHED | wc -l  # 查看TCP连接数
    ss -s        # 统计套接字信息

2. 高级工具

  • sar(系统活动报告)

    sar -u 1 3    # 查看CPU使用率(每秒1次,共3次)
    sar -r        # 查看内存使用历史
  • dstat

    dstat -cmsn  # 综合监控CPU、内存、网络、磁盘

三、子系统优化策略

1. CPU优化

  • 调整进程优先级

    nice -n 19 ./script.sh   # 启动低优先级进程
    renice 19 -p PID         # 修改运行中进程的优先级
  • 绑定CPU核心(减少上下文切换)

    taskset -c 0,1 ./program  # 绑定到CPU0和CPU1
  • 内核参数调整

    # 修改/etc/sysctl.conf
    kernel.sched_child_runs_first = 1  # 子进程优先调度

2. 内存优化

  • 调整Swap使用策略

    # 修改/etc/sysctl.conf
    vm.swappiness = 10        # 降低Swap使用倾向(0-100,默认60)
    vm.vfs_cache_pressure = 50 # 减少inode缓存回收频率
  • 禁用透明大页(THP)

    echo never > /sys/kernel/mm/transparent_hugepage/enabled

3. 磁盘I/O优化

  • 选择合适I/O调度器

    # 查看当前调度器
    cat /sys/block/sda/queue/scheduler
    # 临时修改为deadline调度器(适用于SSD)
    echo deadline > /sys/block/sda/queue/scheduler
  • 文件系统优化(ext4)

    # 挂载参数:noatime(不记录访问时间), data=writeback
    UUID=xxx / ext4 defaults,noatime,data=writeback 0 1

4. 网络优化

  • TCP参数调优

    # 修改/etc/sysctl.conf
    net.core.somaxconn = 4096       # 提高连接队列长度
    net.ipv4.tcp_fin_timeout = 30   # 缩短TIME_WAIT超时
    net.ipv4.tcp_tw_reuse = 1       # 允许重用TIME_WAIT连接
    sysctl -p  # 应用配置
  • 限制连接数

    # 使用iptables限制单IP连接数
    iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 50 -j DROP

四、资源限制优化

1. ulimit

  • 修改用户级限制

    # 编辑/etc/security/limits.conf
    * soft nofile 65535    # 文件描述符软限制
    * hard nofile 65535    # 硬限制
  • 生效方式:重启会话或执行 ulimit -n 65535

2. cgroups(控制组)

  • 限制进程资源

    # 创建cgroup(需安装cgroup-tools)
    cgcreate -g cpu,memory:/my_group
    # 限制CPU使用为50%
    cgset -r cpu.cfs_period_us=100000 -r cpu.cfs_quota_us=50000 my_group
    # 限制内存为1GB
    cgset -r memory.limit_in_bytes=1G my_group
    # 将进程加入cgroup
    cgexec -g cpu,memory:my_group ./program

五、安全与注意事项

  1. 备份配置文件:修改前备份 /etc/sysctl.conf/etc/security/limits.conf

  2. 灰度测试:先在测试环境验证参数调整效果。

  3. 避免过度优化:如无明确瓶颈,优先使用默认配置。


六、综合案例


案例1:TCP连接数过高导致Web服务卡顿

问题描述

Nginx服务器在高并发时出现 Too many open files 错误,TCP连接数超过默认限制。

优化配置

  1. 修改文件描述符限制

    # 编辑 /etc/security/limits.conf
    * soft nofile 65535
    * hard nofile 65535
    nginx soft nofile 65535   # 针对Nginx用户单独设置
  2. 调整Nginx配置

    # /etc/nginx/nginx.conf
    worker_rlimit_nofile 65535;  # 与limits.conf一致
    events {worker_connections 4096;   # 每个Worker进程连接数
    }
  3. 内核TCP参数优化

    # 编辑 /etc/sysctl.conf
    net.core.somaxconn = 65535     # 最大连接队列
    net.ipv4.tcp_max_syn_backlog = 65535  # SYN队列长度
    net.ipv4.tcp_tw_reuse = 1      # 重用TIME_WAIT连接
    net.ipv4.tcp_fin_timeout = 30  # 缩短FIN超时
    sysctl -p  # 生效配置

验证方法

ss -lnt | grep 'LISTEN'   # 查看监听队列长度
cat /proc/$(pidof nginx)/limits | grep 'open files'  # 确认Nginx进程限制

案例2:Java应用内存溢出导致系统崩溃

问题描述

Tomcat服务频繁触发OOM(Out of Memory),且系统Swap使用率过高。

优化配置

  1. 限制JVM堆内存

    # 修改Tomcat启动脚本 catalina.sh
    export JAVA_OPTS="-Xms2G -Xmx2G -XX:MaxMetaspaceSize=512M"
  2. 调整系统Swap策略

    # 编辑 /etc/sysctl.conf
    vm.swappiness = 10       # 降低Swap使用倾向
    vm.overcommit_memory = 1 # 允许超量分配内存(谨慎使用)
  3. 使用cgroups限制内存

    # 创建内存限制组
    cgcreate -g memory:/tomcat
    cgset -r memory.limit_in_bytes=4G /tomcat
    cgset -r memory.memsw.limit_in_bytes=6G /tomcat  # 物理内存+Swap总限制
    # 启动Tomcat
    cgexec -g memory:tomcat /opt/tomcat/bin/startup.sh

验证方法

free -h          # 查看内存和Swap使用
ps aux | grep tomcat  # 确认cgroup限制生效
cat /sys/fs/cgroup/memory/tomcat/memory.usage_in_bytes  # 查看内存占用

案例3:磁盘I/O延迟导致数据库性能下降

问题描述

MySQL读写缓慢,iostat 显示磁盘 %util 持续高于90%。

优化配置

  1. 切换I/O调度器

    # 临时切换为deadline调度器(SSD推荐)
    echo deadline > /sys/block/sda/queue/scheduler
    # 永久生效(GRUB配置)
    vi /etc/default/grub
    GRUB_CMDLINE_LINUX_DEFAULT="elevator=deadline"
    update-grub  # Debian/Ubuntu
    grub2-mkconfig -o /boot/grub2/grub.cfg  # CentOS/RHEL
  2. 调整文件系统挂载参数

    # 编辑 /etc/fstab
    UUID=xxxx /data ext4 defaults,noatime,nodiratime,data=writeback 0 2
  3. MySQL配置优化

    # /etc/my.cnf
    innodb_flush_method = O_DIRECT     # 绕过内核缓存
    innodb_io_capacity = 2000          # SSD建议值
    innodb_buffer_pool_size = 8G       # 分配足够缓冲池

验证方法

cat /sys/block/sda/queue/scheduler  # 确认调度器
iostat -xm 1                        # 观察%util和await变化
mysql> SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool%';  # 查看缓冲池命中率

案例4:CPU竞争导致多线程应用性能差

问题描述

Python多进程数据处理程序运行缓慢,top 显示CPU在多个核心间频繁切换。

优化配置

  1. 绑定进程到特定CPU核心

    # 使用taskset绑定到CPU0-3
    taskset -c 0-3 python3 data_processing.py
  2. 调整进程优先级

    nice -n -20 python3 high_priority_task.py  # 最高优先级(需root)
    renice -n 19 -p 1234   # 将运行中的PID=1234进程设为低优先级
  3. 禁用CPU节能模式

    # 安装cpufrequtils(Debian/Ubuntu)
    apt install cpufrequtils
    # 设置为性能模式
    cpufreq-set -g performance -c 0  # 对每个CPU核心执行

验证方法

mpstat -P ALL 1      # 查看各核心利用率
cpufreq-info         # 确认当前CPU频率策略

案例5:网络丢包导致视频流传输卡顿

问题描述

视频流服务器在传输大流量UDP数据时出现丢包,sar -n UDP 1 显示 idgm/s(输入数据报)超过网卡处理能力。

优化配置

  1. 增大Socket缓冲区

    # 编辑 /etc/sysctl.conf
    net.core.rmem_max = 67108864   # 接收缓冲区最大值(64MB)
    net.core.wmem_max = 67108864   # 发送缓冲区最大值
    net.core.netdev_max_backlog = 500000  # 网卡队列长度
  2. 多队列网卡优化

    # 启用RSS(Receive Side Scaling)
    ethtool -L eth0 combined 8     # 设置8个队列(需网卡支持)
    # 绑定IRQ到不同CPU核心
    vi /etc/rc.local
    /usr/bin/irqbalance --powerthresh=50  # 启用IRQ平衡
  3. 应用层优化(FFmpeg示例)

    ffmpeg -i input -c copy -f mpegts udp://target:1234?buffer_size=4194304  # 增大发送缓冲区

验证方法

ethtool -S eth0 | grep rx_dropped  # 查看丢包统计
sar -n UDP 1                       # 监控UDP报文状态
cat /proc/interrupts | grep eth0   # 确认IRQ分布

总结:优化配置原则

  1. 精准定位瓶颈

    • 使用 perf top 分析CPU热点。

    • 通过 dmesg 检查内核OOM或I/O错误日志。

  2. 层级化调整

    层级工具/方法
    应用层代码优化、连接池配置
    运行时JVM参数、Golang GC策略
    操作系统sysctl、cgroups、ulimit
    硬件/驱动升级SSD、调整RAID级别
  3. 自动化监控

    # 使用Prometheus + Grafana监控模板
    - node_exporter 采集系统指标  
    - alertmanager 配置CPU/内存阈值告警  

附:配置修改注意事项

  1. 备份原始文件

    cp /etc/sysctl.conf /etc/sysctl.conf.bak
  2. 分阶段生效

    • 优先通过 sysctl -w 临时修改测试。

    • 确认稳定后写入配置文件。

  3. 回归测试

    ab -n 10000 -c 500 http://localhost/  # ApacheBench压力测试
    iperf3 -c target_ip -t 60            # 网络带宽测试

附:常用命令速查表

命令作用
sar -u 1 3查看CPU使用率
vmstat 1监控内存和进程队列
iostat -xz 1分析磁盘I/O瓶颈
ss -s统计TCP连接状态

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/85212.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/85212.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/85212.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Google Chrome】谷歌浏览器历史版本下载

最新版: Chrome for Testing availability 谷歌浏览器 Chrome 最新版离线安装包下载地址 v137.0.7151.104 - 每日自动更新 | 异次元软件 历史版本: Download Google Chrome 105.0.5195.102 for Windows - Filehippo.com chrome浏览器,chrome插件,谷…

线性表实训(头歌实践平台课程答案详细解说)

C 和 C 支持 4 种基本数据类型(整型、浮点型、字符型、布尔型)和 3 种复合型数据类型(数组、指针、结构)。复合类型的数据对于数据结构至关重要,因为从某种程度上来说数据量的多少和数据结构的好坏决定了程序的复杂程度…

【前端】threeJS学习(长期更新)

简介 Three.js是用JavaScript编写的第三方库,用于实现3D功能,基于WebGL进行封装。 一个3D模型的建立主要由以下几个部分组成(基本版): * 创建场景scene--相机camera--渲染器renderer--(灯光light); *…

Linux系统--权限

大家好,上一次我们学习了关于Linux中的基础指令,那么我们今天来继续学习Linux的新的内容:权限。那么话不多说,我们开始今天的学习: 目录 Linux权限 1. Linux权限的概念 2. Linux权限管理 3. ⽂件权限值的表⽰⽅法…

论文笔记 <交通灯> <多智能体>DERLight双重经验回放灯机制

今天看的论文是这篇 主要提出了传统优先级经验回放(PER)在复杂交通场景中效率低下,使用二叉树存储样本,导致大规模样本时计算复杂度高。而且不丢弃样本,造成存储空间浪费。 双重经验池: 为了解决以上问题…

Chromium 136 编译指南 macOS篇:环境准备与系统配置(一)

1. 引言 在浏览器技术的星空中,Chromium 犹如一颗最亮的明星,照亮了整个互联网的发展轨迹。作为推动现代 Web 技术革命的核心引擎,Chromium 不仅是 Google Chrome 的技术基石,更是 Microsoft Edge、Opera、以及众多定制浏览器的共…

linux机器间无密码如何传输文件

1. scp传输时的问题 $ scp deepseek_r1_distill_qwen1.5b_content_audit_fp16_20250613_2_Q4_K_M.gguf xxx192.168.xxx:/home/xxx/pretrained_model/output The authenticity of host 192.168.xxx (192.168.xxx) cant be established. ED25519 key fingerprint is SHA256:deOs…

PySpark 使用pyarrow指定版本

背景说明 在 PySpark 3.1.3 环境中,当需要使用与集群环境不同版本的 PyArrow (如 1.0.0 版本)时,可以通过以下方法实现,而无需更改集群环境配置 完整操作说明 去pyarrowPyPI下载对应版本的whl文件后缀whl直接改成zip解压后有两个文件夹&am…

安卓APP投屏调试工具使用教程

安卓APP投屏调试工具使用教程 一、准备工作(一)下载ADB工具(二)配置ADB的环境变量(三)检查是否成功安装(四)adb核心命令说明 二、无线调试流程(一)环境要求&a…

huggingface网站里的模型和数据集

直接下载肯定是不太行,平时访问都不容易,更别提下载东西了,但是我们可以通过国内镜像进行快速下载。 镜像网址: hf-mirror地址:HF-Mirror 进入网站之后,在搜索框里搜索你想下载的内容,接下来…

Node.js 路由请求方式大全解:深度剖析与工程实践

文章目录 🌐 Node.js 路由请求方式大全解:深度剖析与工程实践一、📜 HTTP 请求方法全景图🏆 核心方法深度对比HTTP 请求方法概念对比表🛠️ 特殊方法应用场景 二、🎨 各方法深度解析1. GET - 数据查看器&am…

JS-实现一个链式调用工具库

要求: 支持链式调用,如:_chain(data).map().filter().value()实现map、filter、等常用方法支持惰性求值(延迟执行、直到用到value()时才真正计算)。 链式调用的实现原理的关键点是:函数执行完以后&#x…

【人工智能数学基础】实变函数与泛函分析

数学分析、解析几何、高等代数、实变函数、常微分方程、近世代数、微分几何、复变函数、点集拓扑、概率论、数理统计、数理逻辑、偏微分方程、泛函分析、动力系统、数学物理方程、数论导引、群与代数表示、微分流形、代数拓扑、代数几何、金融数学、多元统计分析、应用随机过程…

css3 背景色渐变

在 CSS 中,使用渐变色需要用到 gradient 属性,而 gradient 属性分为 线性渐变 linear-gradient 与 径向渐变 radial-gradient。今天主要是说一下 linear-gradient 线性渐变属性。 例如:background: linear-gradient(90deg, #e7f1fc, #f5f9fb…

将图片合成为视频(基于 OpenCV)

本文将介绍如何使用 Python 和 OpenCV 将一组图像文件合成为一个视频文件。你将学会: 使用 os 模块遍历文件夹中的图像 使用 cv2.VideoWriter 写入视频 设置分辨率与帧率参数 对图像尺寸进行统一处理 简单的视频生成应用开发 1. 所需模块与安装 本章需要以下 …

HanLP 使用教程:从安装到实战应用

HanLP 使用教程:从安装到实战应用 HanLP 是由hankcs开发的一款高效、多功能的中文自然语言处理(NLP)工具包,支持分词、词性标注、命名实体识别(NER)、依存句法分析、关键词提取、文本摘要等任务。本教程将…

MySQL 分组函数全面详解与最佳实践

MySQL 分组函数全面详解与最佳实践 MySQL 分组函数(聚合函数)的核心知识、注意事项和高级应用技巧: 📊 分组函数核心列表 函数描述示例COUNT()计算行数COUNT(*)SUM()计算数值总和SUM(salary)AVG()计算平均值AVG(score)MAX()获取…

华为OD 最小循环子数组

1. 题意 给定一个由若干整数组成的数组 nums,请检查数组是否是由某个子数组重复循环拼接而成,请输出这个最小的子数组。 2. 题解 利用 k m p kmp kmp中的 n e x t next next数组性质,我们可以求出 n u m s nums nums中的最长公共 前缀后缀…

FreeCAD创作参数化凹形和水波纹式雨水箅子

这种非常流行的美观的雨水篦子是都市的宠爱,大家要多多去用。 用FC来创建参数化后,设计人员可以随意修改参数,满足自身的要求,调整各部件的位置,达到满意的布局,非常快捷。 水波纹雨水篦子 凹形雨水篦子

如何用一台服务器用dify私有部署通用的大模型应用?

dify是什么?如何用一台服务器用dify私有部署通用的大模型应用? Dify 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务(Backend as Service)和LLMOps的理念,使开发者可以快速搭建生产级的生成式 AI 应用…