Linux系统性能调优技巧

Linux系统性能调优技巧

说明:以下指令中包含敏感操作指令,若当前环境是生产环境,请谨慎操作。

1. 查看系统资源使用情况

调优系统前,首先要了解系统的当前资源使用情况。可以使用以下工具:

top:实时显示系统任务和资源占用情况。
htop:比top更友好,提供交互式界面。
vmstat:显示系统的虚拟内存统计信息。
示例:

top

或者

htop

查看系统的内存、CPU、IO 等使用情况。你可以按 M 键排序内存,按 P 键排序CPU使用率。

2. 优化内存管理

2.1 调整交换空间(Swap)

如果系统频繁使用交换空间,可能会导致性能下降。可以通过调整swappiness参数来控制交换空间的使用频率。该参数的范围是0-100,数值越低,表示系统越倾向于使用物理内存,越高则倾向于使用交换空间。

示例:

# 查看当前swappiness值
cat /proc/sys/vm/swappiness

# 临时调整swappiness值为10
sudo sysctl vm.swappiness=10

# 永久调整swappiness值(编辑sysctl.conf)
sudo echo "vm.swappiness = 10" >> /etc/sysctl.conf
sudo sysctl -p

2.2 清理缓存

Linux会缓存文件数据来加速访问。你可以通过手动清理缓存来释放内存。

示例:

# 查看内存缓存情况
free -h

# 清理文件页缓存
sudo sync; echo 1 > /proc/sys/vm/drop_caches

# 清理目录项和inode缓存
sudo sync; echo 2 > /proc/sys/vm/drop_caches

# 清理所有缓存
sudo sync; echo 3 > /proc/sys/vm/drop_caches

3. 优化CPU性能

3.1 调整CPU调度器

Linux的调度器会根据进程的优先级和系统负载情况,动态调整CPU资源。你可以通过调整CPU调度器的行为来提高性能,特别是对于多核CPU系统。

示例:

# 查看当前CPU调度器的策略
cat /sys/block/sda/queue/scheduler

# 将调度器设置为"deadline"(适合I/O密集型操作)
echo deadline > /sys/block/sda/queue/scheduler

3.2 设置CPU频率

你可以控制CPU的频率调节,以提高性能或节省电力。cpufrequtils工具可以帮助你查看和调整CPU频率。

示例:

# 查看当前CPU频率
cat /proc/cpuinfo | grep MHz

# 设置CPU最高频率为2.5GHz
sudo cpufreq-set -f 2.5GHz

# 查看当前的CPU频率调节策略
cpufreq-info

4. 优化磁盘I/O性能

4.1 使用iotop监控I/O

iotop可以用来监控实时磁盘I/O操作,帮助我们发现哪些进程占用了大量的磁盘带宽。

示例:

sudo iotop

4.2 调整磁盘调度器

与CPU调度器类似,磁盘调度器也决定了磁盘的读写策略。常见的调度器有cfq(完全公平调度器)和deadline(适用于延迟敏感型工作负载)。可以通过调整调度器来优化磁盘性能。

示例:

# 查看当前磁盘的调度器
cat /sys/block/sda/queue/scheduler

# 设置调度器为"deadline"
echo deadline > /sys/block/sda/queue/scheduler

5. 调整文件系统性能

5.1 增加文件系统缓存

Linux的文件系统(如ext4)有缓存机制,增加缓存可以提高磁盘访问的效率。可以调整vm.vfs_cache_pressure参数来优化文件系统缓存。

示例:

# 查看当前VFS缓存压力
cat /proc/sys/vm/vfs_cache_pressure

# 调整VFS缓存压力为50(默认为100)
sudo sysctl vm.vfs_cache_pressure=50

6. 网络性能优化

6.1 调整TCP连接参数

调整TCP相关的内核参数可以提高网络连接的性能,特别是对于高负载的网络服务。

示例:

# 查看当前TCP最大连接数
sysctl net.ipv4.tcp_max_syn_backlog

# 增加最大连接数
sudo sysctl -w net.ipv4.tcp_max_syn_backlog=2048

# 调整TCP缓冲区大小
sudo sysctl -w net.core.rmem_max=16777216
sudo sysctl -w net.core.wmem_max=16777216

6.2 增加文件描述符的限制

Linux对每个进程打开的文件数有限制。可以通过调整ulimit来增加每个进程能够打开的文件描述符数量。

示例:

# 查看当前最大文件描述符限制
ulimit -n

# 临时设置最大文件描述符限制为65535
ulimit -n 65535

# 永久修改(编辑/etc/security/limits.conf)
echo "* hard nofile 65535" | sudo tee -a /etc/security/limits.conf
echo "* soft nofile 65535" | sudo tee -a /etc/security/limits.conf

7. 优化进程管理

7.1 设置进程优先级

通过设置进程的优先级,可以使重要的进程获得更多的资源。使用nice和renice命令可以调整进程的优先级。

示例:

# 启动一个进程并设置其优先级(-20为最高优先级)
nice -n -20 some_process

# 修改一个已启动进程的优先级(假设进程ID为1234)
renice -n -10 -p 1234

7.2 调整进程的CPU亲和性

使用taskset命令可以设置进程运行在哪些CPU核心上,这有助于优化多核CPU的负载均衡。

示例:

# 将进程绑定到CPU 0和CPU 1上
taskset -c 0,1 some_process

8. 监控和自动化调优

8.1 使用sysstat工具

sysstat工具包提供了包括iostat, mpstat, pidstat等多个监控工具,可以帮助你获取系统和进程的详细性能数据。

示例:

# 安装sysstat
sudo apt-get install sysstat

# 查看磁盘I/O情况
iostat -x 1

# 查看各CPU的使用情况
mpstat -P ALL 1

8.2 使用sysctl自动化调优

可以将常用的性能调优参数写入/etc/sysctl.conf,让系统启动时自动应用这些优化。

示例:

# 编辑sysctl.conf
sudo nano /etc/sysctl.conf

# 添加优化参数
vm.swappiness = 10
vm.vfs_cache_pressure = 50

# 使配置生效
sudo sysctl -p

你可能感兴趣的:(linux)