当前位置: 首页 > news >正文

Linux系统性能调优技巧详解

Linux系统性能调优技巧详解

Linux 系统广泛应用于服务器、嵌入式设备以及开发工作站中,因此对其进行性能调优是保障系统高效运行的关键之一。性能调优不仅可以提高系统的响应速度,还能有效优化资源使用,避免瓶颈。在这篇文章中,我们将深入探讨 Linux 系统性能调优的几种常见方法,并展示相应的代码和工具使用。
在这里插入图片描述

1. 性能调优前的准备

在开始调优之前,我们需要明确调优的目标。通常,Linux 系统的性能瓶颈来自于 CPU、内存、磁盘 I/O 和网络这四大部分。调优前,首先要进行性能监控和瓶颈分析。以下工具可以帮助我们了解系统当前的状态:

  • top:实时查看 CPU、内存使用情况,监控进程。
  • htoptop 的增强版,带有更友好的界面。
  • vmstat:显示内存、I/O、CPU的统计信息。
  • iostat:监控磁盘I/O性能。
  • sar:收集和报告系统活动信息。
  • netstat:查看网络连接和状态。
  • perf:用于 CPU 性能分析的强大工具。

1.1 使用 top 监控 CPU 和内存

top 是 Linux 中最常用的性能监控工具之一,输入以下命令可以查看系统当前的 CPU 和内存使用情况:

top

top 输出的关键部分包括:

  • load average:显示系统负载,数值越大表示系统负载越高,通常系统负载应控制在CPU核数的范围内。
  • %CPU:每个进程的 CPU 占用率。
  • %MEM:每个进程的内存占用率。

1.2 使用 iostat 监控磁盘I/O

磁盘 I/O 是服务器性能瓶颈的常见来源之一。iostat 工具可以帮助你了解系统的 I/O 使用情况:

iostat -x 1 5

该命令会每秒更新一次磁盘 I/O 状态,运行 5 次。输出的关键指标有:

  • %util:磁盘的使用率。如果此值接近 100%,说明磁盘可能成为瓶颈。
  • await:每次 I/O 操作的平均等待时间,值越小越好。
    在这里插入图片描述

2. CPU性能调优

2.1 优化 CPU 亲和性

CPU 亲和性指的是将特定进程绑定到特定的 CPU 核心上,以减少进程切换和缓存抖动。可以通过 taskset 命令来设置进程的 CPU 亲和性。

例如,将某个进程(PID 为 1234)绑定到第 1 和第 2 号 CPU 核上:

taskset -c 0,1 -p 1234

这样可以减少进程在多个 CPU 核之间切换带来的性能损失。

2.2 优化 CPU 调度策略

Linux 提供了几种不同的 CPU 调度策略,适用于不同类型的任务。常见的调度策略有:

  • SCHED_OTHER:默认的调度策略,适用于大多数进程。
  • SCHED_FIFO:适用于实时任务的调度策略,优先级高于普通任务。
  • SCHED_RR:实时任务的另一种策略,基于时间片轮转调度。

可以通过 chrt 命令来修改进程的调度策略。例如,将某个进程的调度策略设置为 SCHED_RR 并指定优先级 10:

chrt -r -p 10 1234

在这里插入图片描述

3. 内存调优

3.1 调整虚拟内存(swappiness)

虚拟内存(swap)是 Linux 在内存不足时将部分数据写入磁盘的一种机制。然而,频繁使用 swap 会导致性能下降。因此,可以通过调整 swappiness 参数来控制系统使用虚拟内存的频率。

查看当前系统的 swappiness 值:

cat /proc/sys/vm/swappiness

默认情况下,该值通常为 60,表示当系统使用到 40% 的物理内存时就会开始使用 swap。可以通过修改这个值来减少对 swap 的依赖。例如,将 swappiness 设置为 10:

sudo sysctl vm.swappiness=10

这意味着系统在使用到 90% 内存之前不会使用 swap。

3.2 内存清理

在长时间运行的服务器上,内存中的缓存和无用的进程可能会占用大量内存。可以通过以下命令来释放内存中的缓存和无用数据:

sudo sync; sudo echo 3 > /proc/sys/vm/drop_caches

此操作不会影响运行中的进程,但会释放文件系统缓存。

3.3 使用 HugePages 优化内存性能

HugePages 是 Linux 提供的一种内存管理机制,可以有效减少 TLB(翻译后备缓冲区)的命中率,从而提高内存访问效率。配置 HugePages 的步骤如下:

  1. 查看当前系统的 HugePages 配置:
cat /proc/meminfo | grep HugePages
  1. 修改系统的 HugePages 配置(以 1024 页为例):
sudo sysctl -w vm.nr_hugepages=1024
  1. 将配置写入 /etc/sysctl.conf 文件,以便在系统重启后生效:
echo "vm.nr_hugepages=1024" | sudo tee -a /etc/sysctl.conf

在这里插入图片描述

4. 磁盘I/O调优

4.1 调整 I/O 调度算法

Linux 提供了多种 I/O 调度算法,适用于不同的磁盘操作模式:

  • cfq:完全公平队列,适合桌面系统。
  • deadline:基于时间的调度算法,适合数据库系统。
  • noop:简单的 FIFO 队列,适合 SSD。

查看当前磁盘的调度算法:

cat /sys/block/sda/queue/scheduler

修改磁盘调度算法为 deadline

echo deadline | sudo tee /sys/block/sda/queue/scheduler

4.2 调整读写缓存策略

Linux 系统中的磁盘缓存机制能够显著提高磁盘读写性能。可以通过 hdparm 工具来调整磁盘的缓存策略:

sudo hdparm -W1 /dev/sda

此命令开启磁盘的写缓存,能够提升写操作的性能。

4.3 RAID 配置优化

如果你的系统使用 RAID 配置,可以通过调整 RAID 阵列的 stripe_cache_size 来提高 RAID 的性能:

sudo echo 32768 > /sys/block/md0/md/stripe_cache_size

这个命令将 RAID 阵列的缓存大小设置为 32768,能够显著提升 RAID 的写性能。
在这里插入图片描述

5. 网络性能调优

5.1 调整 TCP 缓存

为了优化网络性能,可以调整 Linux 系统的 TCP 缓存大小。默认情况下,系统的 TCP 缓存大小较小,可以通过以下命令进行调优:

sudo sysctl -w net.core.rmem_max=26214400
sudo sysctl -w net.core.wmem_max=26214400
sudo sysctl -w net.ipv4.tcp_rmem="10240 87380 12582912"
sudo sysctl -w net.ipv4.tcp_wmem="10240 87380 12582912"

这些命令调整了接收和发送的 TCP 缓存大小,可以提高高延迟、高带宽网络中的传输速度。

5.2 开启 TCP Fast Open

TCP Fast Open 是一种新的 TCP 协议扩展,允许客户端在连接握手时就开始发送数据,从而减少延迟。可以通过以下命令开启 TCP Fast Open:

sudo sysctl -w net.ipv4.tcp_fastopen=3

将这个配置写入 /etc/sysctl.conf 以在系统重启后保持设置:

echo "net.ipv4.tcp_fastopen=3" | sudo tee -a /etc/sysctl.conf

在这里插入图片描述

6. 使用 perf 进行性能分析

perf 是一个功能强大的 Linux 性能分析工具,它可以帮助你定位性能瓶颈。以下是一个简单的使用示例:

  1. 安装 perf
sudo apt install linux-tools-common linux-tools-generic
  1. 使用 perf 来记录 CPU 性能数据:
perf record -a -g
  1. 分析性能报告:
perf report

perf 会生成

一份详细的报告,显示哪些函数或进程占用了最多的 CPU 资源,从而帮助你进行进一步的优化。
在这里插入图片描述

7. 结论

Linux 系统性能调优是一项复杂的任务,需要根据具体的工作负载和系统环境进行有针对性的优化。本文介绍了从 CPU、内存、磁盘 I/O 和网络四个方面进行性能调优的方法,并提供了一些实用的工具和配置建议。在实际操作中,性能调优不仅仅是调整参数,还需要持续监控系统性能,以确保优化效果持续有效。通过合理的调优,Linux 系统可以在高负载下保持高效、稳定的运行。
在这里插入图片描述

相关文章:

Linux系统性能调优技巧详解

Linux系统性能调优技巧详解 Linux 系统广泛应用于服务器、嵌入式设备以及开发工作站中,因此对其进行性能调优是保障系统高效运行的关键之一。性能调优不仅可以提高系统的响应速度,还能有效优化资源使用,避免瓶颈。在这篇文章中,我…...

MFC工控项目实例之十九手动测试界面输出信号切换

承接专栏《MFC工控项目实例之十八手动测试界面输入信号实时检测》 根据板卡设置界面组合框选项设定的输出信号,通过读取文件中保存的键值,用单选按钮切换输出信号接通、关闭。 1、在Data_1.h文件中添加代码 CString COMB_Data_O_1[]{"夹紧",&…...

数据结构——栈的基本操作

前言 介绍 🍃数据结构专区:数据结构 参考 该部分知识参考于《数据结构(C语言版 第2版)》55 ~ 59页 🌈每一个清晨,都是世界对你说的最温柔的早安:ૢ(≧▽≦)و✨ 1、栈的基本概念 栈&#x…...

Chainlit集成LlamaIndex实现知识库高级检索(组合对象检索)

检索原理 对象组合索引的原理 是利用IndexNode索引节点,将两个不同类型的检索器作为节点对象,使用 SummaryIndex (它可以用来构建一个包含多个索引节点的索引结构。这种索引通常用于从多个不同的数据源或索引方法中汇总信息,并能…...

万界星空科技铜拉丝行业MES系统,实现智能化转型

一、铜拉丝行业生产管理的难点主要体现在以下几个方面: 1、标准严格:铜线产品对质量的要求极高,特别是在电气性能、导电性、耐腐蚀性等方面,任何微小的瑕疵都可能影响产品的使用效果和安全性。 2、过程监控:生产过程…...

ECCV 2024 现场:参会者付高价、跨万里,却无法入场?

ECCV(European Conference on Computer Vision,欧洲计算机视觉国际会议)是计算机视觉领域的重要国际会议之一,与CVPR和ICCV并称为计算机视觉的三大顶级会议。 ECCV2024是该系列会议的第18届会议,2024年9月29日至10月4…...

使用rsync+jenkins实现服务自动部署全流程

项目背景:城市政务云服务器没有上k8s,所有后端服务都是原始方式部署启动 (java -jar xxx.jar),那么有没有方式简化部署难度,实现自动部署?当然是有的,下面详细介绍(以Cen…...

python 实现decision tree决策树算法

decision tree决策树算法介绍 决策树算法(Decision Tree Algorithm)是一种基于输入特征对实例进行分类的树结构模型,主要用于分类和回归任务。其基本原理是根据训练数据的特征属性和类别标签之间的关系,生成一个能够对新样本进行…...

前端大模型入门:实战篇之Vue3+Antdv+transformers+本地模型实现增强搜索

本文将之前的文章,实现一个场景的实战应用,包含代码等内容。利用纯前端实现增强的列表搜索,抛弃字符串匹配,目标是使用番茄关键字可以搜索到西红柿 1 准备工作 1.1 了解llm和web开发 web端的ai开发参考 前端大模型入门&#xff…...

《向量数据库指南》——Fivetran 的 Partner SDK:构建自定义连接器和目标

哈哈,说到 Fivetran 的 Partner SDK,这可真是个好东西啊!作为向量数据库领域的“老司机”,我今天就来给大家详细讲讲这个 SDK 的厉害之处,以及如何用它来构建自定义连接器和目标,实现与 Fivetran 自动化数据移动平台的无缝集成。 一、Fivetran Partner SDK:开启自定义连…...

微信小程序的 button 标签的边框如何去除?

目录 问题描述: 问题原因: 解决办法: 方案一 方案二 问题描述: 实际开发中会发现这个 button 自带有样式,当背景颜色设置为白色的时候还有一个黑色的边框,刚开始那个边框怎么都去不掉 无法去除的边框…...

20240926 关于Goland处理wsl-GOROOT原理猜测

GOROOT的原理 go sdk与java jdk类似,是go的编译工具链的集合。 在windows上,我们通过在系统环境变量中添加GOROOT并设置为go sdk地址,使得命令行可以访问到go sdk并执行go test、build等命令,这样设置的变量是全局生效的&#x…...

Anki 学习日记 - 卡片模版 - 单选ABCD(纯操作)

摘要:在不懂前端语言的情况下自定义卡片模版,卡片模版的字段 安装(官网):Anki - powerful, intelligent flashcards (ankiweb.net) 一、在哪能修改卡片模版 管理笔记模板 - > 添加 -> 问答题 -> 设置名称 二…...

钉钉x昇腾:用AI一体机撬动企业数字资产智能化

“走红”近两年后,大模型正在加速走进千行万业。 由于大模型的主要模态是文字和图片,恰好是数字化办公最基础的内容要素,办公于是成了离AI最近的场景。 公文写作、表格生成、提炼大纲、文本翻译、代码润色、数据统计、智能问答……越来越多…...

【C/C++】 秋招常考面试题最全总结(让你有一种相见恨晚的感觉)

目录 1.C程序编译链接过程 2.浅拷贝和move有区别吗 3.深拷贝和浅拷贝的区别 4.空类的大小 5.类的继承有几种方式,区别是什么? 六、extern 关键字的作用 七、static关键字的作用 八、指针和引用的区别 九、C内存分配方式 十、结构体对齐…...

CSS面试真题 part1

CSS面试真题 part1 1、说说你对盒子模型的理解2、谈谈你对BFC的理解3、什么是响应式设计?响应式设计的基本原理是什么?如何做?4、元素水平垂直居中的方法有哪些?如果元素不定宽高呢?5、如何实现两栏布局,右…...

针对考研的C语言学习(定制化快速掌握重点5)

顺序表 特点: 写代码主要就是增删改查!!! 写代码的边界性非常重要以及考研插入和删除的位置都是从1开始,而数组下标是从0开始 【注】下标和位置的关系 线性表最重要的是插入和删除会涉及边界问题以及判断是否合法 …...

构建高效房屋租赁系统:Spring Boot应用

1 绪论 1.1 研究背景 中国的科技的不断进步,计算机发展也慢慢的越来越成熟,人们对计算机也是越来越更加的依赖,科研、教育慢慢用于计算机进行管理。从第一台计算机的产生,到现在计算机已经发展到我们无法想象。给我们的生活改变很…...

学习单片机编程和硬件设计步骤

学习单片机编程和硬件设计可以分为几个步骤: 理解基本概念:首先需要了解单片机的基本概念、硬件结构和工作原理 。 选择开发平台:选择一个合适的单片机系列作为起点,如Arduino、ESP8266/ESP32或STM32系列 。 准备工具和环境&…...

.net Framework 4.6 WebAPI 使用Hangfire

C# 使用 Hangfire 第一章 .net Framework 4.6 WebAPI 使用Hangfire 文章目录 C# 使用 Hangfire前言一、hangfire是什么?二、hangfire的特点三、.net Framework 中hangfire的使用方法第一步:创建WebAPI控制器第二步:添加nuget包第三步 创建startup类新建项目startup类Startu…...

两个向量所在平面的法线,外积,叉积,行列式

偶尔在一个数学题里面看到求两向量所在平面的法线,常规方法可以通过法线与两向量垂直这一特点,列两个方程求解;另外一种方法可以通过求解两个向量的叉积,用矩阵行列式 (determinant) 的方式,之前还没见过,在…...

C++之 友元重载 以及最常用的几种友元函数

在之前的友元中就曾经讲过,我们为了去访问修改私有成员中的数据时,只能通过公有的办法去进行访问操作,非常的局限。所以C引用了友元函数,只要加上friend关键字,C的这个类,会自动把这个函数的权限拉到类内&a…...

动态规划(3)——dp多状态问题Ⅰ

题一.按摩师(LeetCode) 题目描述 一个有名的按摩师会收到源源不断的预约请求,每个预约都可以选择接或不接。在每次预约服务之间要有休息时间,因此她不能接受相邻的预约。给定一个预约请求序列,替按摩师找到最优的预约集…...

在Mac电脑上安装adb环境

当你在命令行输入 adb version 或adb devices, 报错:zsh: command not found: adb ,那么说明你的 Mac 上没有安装 ADB(Android Debug Bridge),或者它没有添加到你的路径中。你可以按照以下步骤安装和配置 ADB&#xff…...

分糖果C++

题目&#xff1a; 样例解释&#xff1a; 样例1解释 拿 k20 块糖放入篮子里。 篮子里现在糖果数 20≥n7&#xff0c;因此所有小朋友获得一块糖&#xff1b; 篮子里现在糖果数变成 13≥n7&#xff0c;因此所有小朋友获得一块糖&#xff1b; 篮子里现在糖果数变成 6<n7&#xf…...

Spring中如何为静态变量注入值

在 Spring 中&#xff0c;如果使用 Value 注解注入值&#xff0c;不能将其应用于 static 字段。Spring 只能为实例变量注入值&#xff0c;不能直接对静态变量进行注入。 使用 PostConstruct 初始化&#xff1a; 如果确实需要在静态上下文中使用该值&#xff0c;可以使用 Post…...

HTML5实现唐朝服饰网站模板源码

文章目录 1.设计来源1.1 网站首页-界面效果1.2 唐装演变-界面效果1.3 唐装配色-界面效果1.4 唐装花纹-界面效果1.5 唐装文化-界面效果 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&#xff0c;在线沟通 作者&#xff1a;xcL…...

ESXI识别USB设备

步骤&#xff1a; 插入usb设备到服务器。关闭虚拟机&#xff0c;添加USB控制器&#xff0c;根据U盘选择usb 3.0控制器&#xff0c;再添加usb设备如果usb设备灰色&#xff0c;进入主机打开SSH。使用xshell进行连接&#xff0c;运行以下命令&#xff1a; ESXI识别USB设备 - 插入…...

视频美颜SDK与直播美颜工具API是什么?计算机视觉技术详解

今天&#xff0c;小编将深入探讨视频美颜SDK与直播美颜工具API的概念及其背后的计算机视觉技术。 一、视频美颜SDK的概念 视频美颜SDK是一套用于开发实时美颜效果的工具集&#xff0c;开发者可以利用它在视频流中实现面部特征的优化。这些SDK通常提供了一系列功能&#xff0c…...

not exist 解决一对多 场景 条件过滤问题

场景&#xff1a; 现在存在一对多关系&#xff0c;蓝色的盒子装的篮球&#xff0c;黄的的盒子装的黄球&#xff0c; 黑色的盒子 &#xff08;模拟工作类似场景&#xff09; boxIdballId蓝盒ID-15蓝盒ID-16蓝盒ID-17黄盒ID-212黄盒ID-215黄盒ID-216黑盒ID-38黑盒ID-39 需求&a…...

php网站后台页面/新闻头条最新消息国家大事

又大一岁了,先祝自己生日快乐,今年是我快乐的一年,最期待的事就是下半年小宝贝的出生,也希望自己今年能在&#xff23;&#xff03;上有更高的成就,虽然我已经不做软件开发了&#xff0c; 但是编程做为一种爱好又何尝不可呢...

网站规划与设计网站页面/优化模型数学建模

文章目录1、Table is in readonly mode (zookeeper path: /clickhouse/tables/iov/t_fault/2)2、Replica /clickhouse/tables/s1/dwd/xxxx/replicas/dt_fault already exists3、数据写入成功&#xff0c;但是数据库并不存在数据4、查询时&#xff08;非MergeTree表引擎&#xf…...

wordpress 缩略图截图/成都今天宣布的最新疫情消息

1.将程序内部时区设置为UTC时间.(UTC 也可以叫 GMT)PHP设置:date_default_timezone_set("UTC");Yii设置:config/main.php 中添加 :timeZone>UTC,如此设置后,PHP生成的时间基本都是UTC时间了.例如://输出当前UTC时间date("Y-m-d H:i:s");2.数据库中存储U…...

中国建设会计协会网站首页/学生制作个人网站

各种ESB产品比较 主流商业和开源ESB的发展趋势、可借鉴的地方和其缺点&#xff1a; 主要介绍&#xff1a;Oracle Service BusWebSphereMessageBrokerMuleServiceMix/FUSE ESBSynapse/WSO2 ESBESB产品一览表包括商业和开源&#xff1a; 类型产品公司商业Oracle Service Bus (OSB…...

资阳网站建设/百度热词指数

VR行业近年来的发展可谓是如火如荼&#xff0c;而与之相关的360度VR全景视频拍摄也跟着大火&#xff0c;无论是刚刚入行的初学者还是资深全景摄影师来说&#xff0c;掌握一些360度VR全景视频拍摄技巧能让你拍出更高质量的作品&#xff0c;这是非常有必要的&#xff0c;今天为大…...

python可以做网站开发吗/淘宝大数据查询平台

大家好&#xff0c;我是时间财富网智能客服时间君&#xff0c;上述问题将由我为大家进行解答。matlab坐标轴范围的设置方法是&#xff1a;1、打开matlab&#xff0c;输入“x0:0.1:100&#xff1b;ysin(x)100&#xff1b;plot(x&#xff0c;y)”画出一个正弦函数图像。2、可以看…...