说明:以下指令中包含敏感操作指令,若当前环境是生产环境,请谨慎操作。
调优系统前,首先要了解系统的当前资源使用情况。可以使用以下工具:
top:实时显示系统任务和资源占用情况。
htop:比top更友好,提供交互式界面。
vmstat:显示系统的虚拟内存统计信息。
示例:
top
或者
htop
查看系统的内存、CPU、IO 等使用情况。你可以按 M 键排序内存,按 P 键排序CPU使用率。
如果系统频繁使用交换空间,可能会导致性能下降。可以通过调整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
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
Linux的调度器会根据进程的优先级和系统负载情况,动态调整CPU资源。你可以通过调整CPU调度器的行为来提高性能,特别是对于多核CPU系统。
示例:
# 查看当前CPU调度器的策略
cat /sys/block/sda/queue/scheduler
# 将调度器设置为"deadline"(适合I/O密集型操作)
echo deadline > /sys/block/sda/queue/scheduler
你可以控制CPU的频率调节,以提高性能或节省电力。cpufrequtils工具可以帮助你查看和调整CPU频率。
示例:
# 查看当前CPU频率
cat /proc/cpuinfo | grep MHz
# 设置CPU最高频率为2.5GHz
sudo cpufreq-set -f 2.5GHz
# 查看当前的CPU频率调节策略
cpufreq-info
iotop可以用来监控实时磁盘I/O操作,帮助我们发现哪些进程占用了大量的磁盘带宽。
示例:
sudo iotop
与CPU调度器类似,磁盘调度器也决定了磁盘的读写策略。常见的调度器有cfq(完全公平调度器)和deadline(适用于延迟敏感型工作负载)。可以通过调整调度器来优化磁盘性能。
示例:
# 查看当前磁盘的调度器
cat /sys/block/sda/queue/scheduler
# 设置调度器为"deadline"
echo deadline > /sys/block/sda/queue/scheduler
Linux的文件系统(如ext4)有缓存机制,增加缓存可以提高磁盘访问的效率。可以调整vm.vfs_cache_pressure参数来优化文件系统缓存。
示例:
# 查看当前VFS缓存压力
cat /proc/sys/vm/vfs_cache_pressure
# 调整VFS缓存压力为50(默认为100)
sudo sysctl vm.vfs_cache_pressure=50
调整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
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
通过设置进程的优先级,可以使重要的进程获得更多的资源。使用nice和renice命令可以调整进程的优先级。
示例:
# 启动一个进程并设置其优先级(-20为最高优先级)
nice -n -20 some_process
# 修改一个已启动进程的优先级(假设进程ID为1234)
renice -n -10 -p 1234
使用taskset命令可以设置进程运行在哪些CPU核心上,这有助于优化多核CPU的负载均衡。
示例:
# 将进程绑定到CPU 0和CPU 1上
taskset -c 0,1 some_process
sysstat工具包提供了包括iostat, mpstat, pidstat等多个监控工具,可以帮助你获取系统和进程的详细性能数据。
示例:
# 安装sysstat
sudo apt-get install sysstat
# 查看磁盘I/O情况
iostat -x 1
# 查看各CPU的使用情况
mpstat -P ALL 1
可以将常用的性能调优参数写入/etc/sysctl.conf,让系统启动时自动应用这些优化。
示例:
# 编辑sysctl.conf
sudo nano /etc/sysctl.conf
# 添加优化参数
vm.swappiness = 10
vm.vfs_cache_pressure = 50
# 使配置生效
sudo sysctl -p