Linux系统性能调优详解

2024-09-08 04:20

本文主要是介绍Linux系统性能调优详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

在服务器运维和管理中,Linux系统的性能调优是确保服务稳定性和响应速度的关键。通过对系统进行细致的调优,可以显著提升处理能力,优化资源利用率。本文将详细介绍Linux性能调优的多个方面,包括系统监控、磁盘优化、内存管理、网络配置等,并提供实用的技巧和工具。

简介

Linux性能调优是一个涉及多个层面的复杂过程,旨在确保系统资源得到最佳利用,从而提高整体性能和响应速度。

调优实践

系统级调优

内核参数

调整内核参数可以显著影响系统性能。如调整文件描述符限制、内存管理参数等。
调整kernel.shmmni(共享内存段的数量)和kernel.shmall(共享内存的总量)可以增加系统对内存的利用率。

内存管理参数
  • vm.swappiness:控制交换空间的使用倾向。值越小,越倾向于使用物理内存;值越大,越倾向于使用交换空间。一般设置在10到60之间。
  • vm.dirty_ratiovm.dirty_background_ratio:控制何时开始写入磁盘的数据比例,以减少I/O压力。
网络参数
  • net.ipv4.tcp_fin_timeout:设置TCP连接释放后等待时间,以加快释放不再使用的端口。
  • net.ipv4.tcp_tw_reuse:允许立即重用处于TIME_WAIT状态的端口,提高端口的利用率。
文件系统参数
  • fs.file-max:设置系统可以打开的最大文件数。增加此值可以提高系统处理大量文件的能力。
  • fs.aio-max-nr:设置异步I/O操作的最大数量,影响数据库和日志处理的性能。
CPU调度参数
  • kernel.sched_child_runs_first:控制子进程是否可以优先于父进程运行,有助于提高响应性。
  • kernel.sched_migration_cost_ns:设置CPU任务迁移的成本,影响进程在CPU核心之间的迁移。
I/O性能参数
  • vm.max_map_count:设置进程可以拥有的最大内存映射区域数量,影响如Java这类需要大量内存映射的应用程序。
  • vm.dirty_expire_centisecsvm.dirty_writeback_centisecs:控制脏页的写回行为,以优化I/O性能。
虚拟内存参数
  • vm.overcommit_memoryvm.overcommit_ratio:控制虚拟内存的分配策略,以避免或减少内存溢出的风险。
系统日志参数
  • kernel.printk:设置内核日志的输出级别和行为,有助于调试和监控系统状态。
模块加载参数
  • kernel.modules_disabled:禁止加载模块,减少系统启动时间和资源消耗。
系统服务

优化系统服务和后台进程,禁用不必要的服务,减少系统开销。

后台服务管理

使用systemctl禁用或限制不必要的服务。

资源控制

使用cgroups进行资源使用控制。
禁用不必要的服务,使用cgroups限制资源使用。

启动优化

减少系统启动时加载的程序和服务,加快启动速度。

优化系统启动项

使用systemd管理服务,禁用不必要的启动服务。

硬件资源调优

CPU
CPU亲和性(CPU Affinity)

CPU亲和性允许你将特定的进程或线程绑定到特定的CPU核心,以减少上下文切换和缓存未命中。

设置CPU亲和性: 可以使用taskset命令将进程绑定到特定的CPU核心:

sudo taskset -c 0,1,2,3 your_process

这将把进程绑定到CPU核心0、1、2和3。

调整调度策略

Linux提供了不同的调度策略,如SCHED_OTHER(默认策略)、SCHED_FIFO和SCHED_RR(实时策略)。

调整调度策略: 可以使用chrt命令设置实时调度策略:

sudo chrt -f 99 your_process

这将把进程的实时优先级设置为99。

调整nice值

nice值用于调整进程的调度优先级,较低的nice值意味着更高的优先级。

调整nice值: 可以使用renice命令调整正在运行的进程的nice值:

sudo renice -n -5 -p PID

这将把指定进程的nice值设置为-5,从而提高其优先级。

使用CFS(完全公平调度器)参数

CFS是Linux默认的调度器,可以通过调整其参数来优化性能。

调整CFS参数: 在/etc/sysctl.conf中添加以下行来调整CFS参数:

vm.vfs_cache_pressure=50
vm.swappiness=10
优化CPU使用率

对于CPU密集型应用,优化代码以减少CPU使用率是关键。

优化代码: 使用编译器优化选项,如-O2或-O3,来提高代码效率。

调整内核参数

某些内核参数可以影响CPU性能,如kernel.sched_min_granularity_ns和kernel.sched_wakeup_granularity_ns。

调整内核参数: 在/etc/sysctl.conf中添加以下行:

kernel.sched_min_granularity_ns=10000000
kernel.sched_wakeup_granularity_ns=8000000
使用perf工具

perf工具是Linux内核提供的性能分析工具,可以用来分析CPU使用情况。

使用perf工具:

sudo perf top
监控CPU使用率

使用top、htop、vmstat或mpstat等工具监控CPU使用率。

监控CPU使用率:

watch -n 1 top -c
调整CPU频率

使用cpufreq工具调整CPU频率,以优化性能和能耗。

调整CPU频率: 设置CPU频率策略为性能模式:

sudo cpufreq-set -g performance
减少上下文切换

优化应用程序设计,减少不必要的线程创建和销毁,以减少上下文切换。

内存

内存分析工具:使用free、meminfo和valgrind监控和分析内存使用情况。

调整swappiness参数

swappiness值的范围从0到100:
低值(如0到10):系统倾向于优先使用物理内存,只有在物理内存不足时才使用交换空间。
高值(如60到100):系统更积极地使用交换空间,这可能会增加磁盘I/O,但可以减少物理内存的压力。

临时调整:

sudo sysctl vm.swappiness=10

永久调整:
在/etc/sysctl.conf文件中添加以下行:

vm.swappiness=10
管理交换空间

交换空间对于系统在物理内存不足时仍然能够正常运行至关重要。合理配置交换空间可以提高系统性能。

检查交换空间:

sudo swapon --show

添加交换空间:
创建交换文件并启用它:

sudo fallocate -l 1G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

永久启用:
在/etc/fstab文件中添加以下行:

/swapfile none swap sw 0 0
优化缓存和缓冲区

Linux内核使用缓存和缓冲区来提高系统性能。调整相关的内核参数可以优化这些区域的使用。

调整缓存参数: 在/etc/sysctl.conf中添加:

vm.vfs_cache_pressure=50
vm.dirty_ratio=10
vm.dirty_background_ratio=5
使用Transparent HugePages (THP)

Transparent HugePages可以减少TLB(Translation Lookaside Buffer)的压力,提高大内存页的性能。

禁用THP: 在/etc/sysctl.conf中添加:

vm.transparent_hugepages=never
监控内存使用

使用工具如free、top、htop和vmstat监控内存使用情况。

实时监控:

watch -n 1 free -m
内存泄漏检测

使用工具如valgrind检测内存泄漏。

使用Valgrind:

valgrind --leak-check=full --show-leak-kinds=all your_program
优化应用程序

优化应用程序的内存使用,如减少内存分配和释放的次数,使用内存池等。

调整文件系统缓存

调整文件系统缓存参数,如vm.max_map_count和fs.file-max。

调整文件系统缓存: 在/etc/sysctl.conf中添加:

fs.file-max=65536
vm.max_map_count=655360
磁盘

磁盘I/O:使用RAID、LVM和选择合适的文件系统来提高磁盘性能。

磁盘阵列(RAID)

RAID(廉价磁盘冗余阵列)通过将数据分散在多个硬盘上提高性能和冗余。常见的RAID级别包括:

RAID 0:提供条带化,没有冗余,最大I/O性能。
RAID 1:镜像,提供冗余,读写性能好,但写性能受限于单个硬盘。
RAID 5:分布式奇偶校验,提供冗余和较好的读写性能。
RAID 10(或称RAID 1+0):提供高性能和冗余。
使用mdadm工具在Linux中配置和管理RAID。

逻辑卷管理(LVM)

LVM提供了更灵活的磁盘管理方式,允许动态调整卷大小和易于管理的存储分配。

物理卷(PV):直接关联到硬盘。
卷组(VG):由一个或多个物理卷组成。
逻辑卷(LV):在卷组中创建,用于存储数据。
使用pvcreate、vgcreate和lvcreate命令来管理LVM。

选择合适的文件系统

不同的文件系统对性能有不同的影响:

EXT4:适用于通用工作负载,良好的性能和可靠性。
XFS:高性能,适合大数据和高并发环境。
Btrfs:先进的文件系统,支持快照和内建RAID。
使用mkfs命令创建文件系统,例如:mkfs.ext4 /dev/sdXN。

文件系统挂载选项

使用noatime或relatime挂载选项减少磁盘写入,提高性能。

I/O调度器

Linux内核提供了多种I/O调度器:

Deadline:保证I/O操作的公平性。
CFQ:提供较好的交互式性能。
使用echo ‘deadline’ | sudo tee /sys/block/sdX/queue/scheduler更改调度器。

磁盘预读和延迟写

调整vm.vfs_cache_pressure和vm.dirty_ratio参数来优化预读和延迟写。

SSD优化

对于SSD,使用discard或trim命令来释放未使用的空间,保持性能。

网络调优

调整TCP/IP栈参数

Linux提供了许多可调的TCP/IP栈参数,这些参数可以优化网络性能。

调整TCP拥塞控制和重传机制:

net.ipv4.tcp_congestion_control:设置TCP拥塞控制算法。
net.ipv4.tcp_retries1和net.ipv4.tcp_retries2:设置重传尝试的次数。
优化TCP缓冲区大小:

net.ipv4.tcp_rmem和net.ipv4.tcp_wmem:设置TCP接收和发送缓冲区的大小。
调整TCP窗口缩放因子:

net.ipv4.tcp_window_scaling:启用或禁用窗口缩放。

使用IP路由优化

调整路由表:

使用ip route命令添加或修改路由规则,以优化数据包的路由路径。
使用策略路由:

使用ip rule命令设置基于特定条件的路由规则。

调整网络设备参数

调整网络设备的队列长度:

net.core.netdev_max_backlog:设置网络设备输入队列的最大长度。
调整网络设备的缓冲区大小:

net.core.rmem_default和net.core.wmem_default:设置网络设备接收和发送缓冲区的默认大小。
net.core.somaxconn:设置监听队列的最大长度。

使用流量控制工具

使用tc(Traffic Control)工具:

使用tc命令配置队列规则、流量整形和流量限制。
使用ifb(Intermediate Functional Block):

创建一个虚拟网络设备,用于流量整形和监控。

优化网络协议栈

调整协议栈的默认设置:
使用sysctl命令调整网络协议栈的默认设置,如net.ipv4.ip_forward(启用IP转发)。

使用网络监控工具

使用iftop或nethogs:

这些工具可以帮助你实时监控网络流量和带宽使用情况。
使用mtr:

mtr结合了traceroute和ping的功能,用于诊断网络延迟和丢包问题。

调整网络文件描述符限制

调整fs.file-max:
增加系统可以打开的最大文件描述符数量。

使用网络加速技术

启用TSO(TCP Segmentation Offload):

在支持的网络设备上启用TSO,减少CPU负载。
启用GRO(Generic Receive Offload):

在支持的网络设备上启用GRO,提高接收性能。

优化DNS解析

调整DNS缓存:
使用dnsmasq或调整systemd-resolved配置,优化DNS解析速度。

使用高级网络特性

使用IPVS(IP Virtual Server):

设置Linux虚拟服务器,实现负载均衡。
使用DPDK(Data Plane Development Kit):

使用DPDK提高网络数据平面的性能。

应用程序调优

数据库优化:优化数据库配置,如调整缓存大小和连接池。
Web服务器:调整Apache、Nginx等Web服务器的配置,提高并发处理能力。
编程优化:优化代码和算法,减少资源消耗。

监控和日志调优

性能监控

使用top、htop、vmstat、iostat等工具监控系统性能。

实时监控工具

top/htop:实时显示系统资源使用情况,包括CPU、内存、磁盘I/O和网络状态。
vmstat/iostat:监控虚拟内存和I/O性能。

历史性能分析:

sar:提供历史性能数据的分析。

日志管理

优化日志记录,使用logrotate管理日志文件,减少磁盘I/O。

安全性调优

防火墙配置:配置iptables或firewalld,优化防火墙规则,减少不必要的网络开销。
安全审计:使用auditd进行系统审计,确保系统安全。

虚拟化和容器调优

KVM/QEMU:优化虚拟机配置,如内存和CPU分配。
Docker:调整Docker容器的资源限制,优化容器性能。

脚本和自动化调优

自动化脚本:编写脚本自动化常规调优任务,如定期清理缓存和日志。
配置管理:使用Ansible、Puppet或Chef等工具管理配置,确保系统一致性和可重复性。

高可用性和负载均衡

负载均衡:使用HAProxy或Nginx实现负载均衡,提高服务可用性和响应速度。
故障转移:配置高可用性解决方案,如Keepalived或Corosync。

定期维护

系统更新:
定期更新系统和软件,保持最新状态。
日志文件清理:
定期清理和维护日志文件,避免日志文件过大。

使用专业工具

性能分析工具:
使用perf工具分析系统性能瓶颈。
I/O性能监控:
使用iotop监控I/O性能。

注意事项

备份当前配置

在修改任何系统配置之前,备份当前的配置文件。这样,如果调优过程中出现问题,你可以轻松地恢复到原始状态。

逐步进行

调优应该逐步进行,一次只调整几个参数。这有助于识别哪些更改对系统性能有积极影响,哪些可能引入了新的问题。

测试和验证

每次调整后,都应该进行彻底的测试以验证更改的效果。使用系统监控工具来观察性能变化,并确保没有负面影响。

监控系统日志

密切关注系统日志,以便及时发现和解决可能出现的问题。日志可以提供关于系统行为和潜在问题的宝贵信息。

考虑硬件限制

硬件能力可能会限制调优的效果。在调整系统参数时,要考虑到硬件的性能和容量限制。

使用专业工具

使用专业的性能分析和监控工具,如perf、iotop、vmstat和sar,可以帮助你更准确地诊断性能瓶颈。

避免过度优化

过度优化可能会导致系统不稳定或降低用户体验。始终寻求平衡,确保系统既高效又稳定。

文档记录

记录所有调优活动,包括所做的更改、预期的结果和实际的效果。这有助于未来的维护和进一步的调优工作。

了解系统负载

了解系统在不同负载下的行为对于有效调优至关重要。在不同的工作负载下测试系统性能,以确保调优措施在各种情况下都有效。

安全性考虑

在提高性能的同时,不要忽视安全性。例如,不要为了性能而放宽安全策略或减少必要的安全检查。

总结

通过上述详细的Linux性能调优技巧,可以全面提升系统效率。性能调优是一个持续的过程,需要根据系统的实际运行情况进行不断的调整和优化。通过这些技巧,可以确保Linux系统在各种负载下都能稳定高效地运行。


good day!!!

这篇关于Linux系统性能调优详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1147103

相关文章

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置