零基礎開始的網工之路第二十一天------性能優化

目錄

一、性能優化概述

二、性能監控工具

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 應用…