调整虚拟内存参数
虚拟内存(swap)的交换行为对服务器性能有显著影响。通过调整swappiness参数,可以控制系统使用swap的倾向。默认值通常为60,对于拥有大量物理内存的服务器,可以将其降低至10-20,甚至0,以减少不必要的内存交换,从而避免I/O瓶颈,将更多活跃数据保留在物理内存中,加快数据访问速度。尤其是对于内存密集型应用(如数据库),此调整尤为重要。
优化文件系统缓存
通过调整vm.dirty_ratio和vm.dirty_background_ratio参数,可以优化脏页(已修改但未写入磁盘的数据)的写回策略。dirty_background_ratio设定了系统后台回写脏页的内存百分比阈值,而dirty_ratio则是强制同步写回的阈值。适当增大这些值(例如,dirty_background_ratio设为10,dirty_ratio设为20)可以减少磁盘I/O操作的频率,特别适合写入繁重的应用,但需注意在服务器断电时有数据丢失风险。
配置TCP网络参数
网络性能是服务器关键指标。调整TCP相关参数能显著提升网络吞吐量和连接处理能力。例如,增大net.ipv4.tcp_window_scaling以支持更大的TCP窗口;启用net.ipv4.tcp_sack以处理数据包丢失;调整net.ipv4.tcp_keepalive_time和net.ipv4.tcp_keepalive_intvl以优化长连接管理;增大net.core.somaxconn以允许更多的等待连接队列。这些调整有助于应对高并发网络请求。
调整文件句柄和inode限制
Linux系统对单个进程和整个系统可打开的文件描述符数量有限制。在高负载的Web服务器或数据库服务器上,默认限制可能不够。通过修改fs.file-max(系统全局限制)和ulimit(用户或进程限制),可以避免出现“Too many open files”错误。确保这些限制值足够高,以支持服务器应用所需的并发连接和文件操作。
优化I/O调度器
I/O调度器决定了块设备上I/O操作的执行顺序。对于不同的存储类型和工作负载,选择合适的调度器至关重要。例如,对于SSD固态硬盘,通常建议使用noop或deadline调度器,因为它们减少了不必要的排序操作,降低了延迟。而对于传统硬盘,cfq(完全公平队列)可能更合适。可以通过内核启动参数或运行时动态修改/sys/block//queue/scheduler文件来设置。
调整内存分配过量策略
内核参数vm.overcommit_memory控制着内存分配策略。默认策略(0)是试探性过量使用,可能在内存不足时导致OOM Killer终止进程。对于需要保证关键服务稳定性的服务器,可以将其设置为1(总是过量使用)或2(禁止过量使用,基于swap空间和内存大小进行严格检查)。特别是设置成2,可以防止因内存耗尽而引发的系统不稳定,但需要确保应用程序分配内存的请求不会因策略过严而失败。
禁用透明大页
透明大页(Transparent Hugepages, THP)旨在通过使用更大的内存页来减少TLB失效,提升性能。然而,在某些工作负载下(如数据库应用),THP可能因内存碎片化或分裂开销而导致性能下降和响应延迟不稳定。因此,许多数据库厂商建议在服务器上禁用THP。可以通过内核启动参数transparent_hugepage=never或在运行时echo never > /sys/kernel/mm/transparent_hugepage/enabled来禁用它。
优化CPU调度与中断平衡
对于多核服务器,合理分配中断请求(IRQ)和进程调度能充分利用CPU资源。可以使用irqbalance服务自动平衡中断处理 across CPU cores。对于性能要求极高的场景,可以考虑手动将特定网卡的中断绑定到指定的CPU核心,以减少上下文切换和缓存失效。此外,检查CPU的电源管理策略,确保其设置为性能模式(performance),避免因节能策略导致CPU频率波动影响性能。
调整网络缓冲区大小
网络缓冲区(read和write)的大小直接影响网络吞吐量。通过调整net.core.rmem_max, net.core.wmem_max(针对所有协议)以及net.ipv4.tcp_rmem, net.ipv4.tcp_wmem(针对TCP)等参数,可以根据网络带宽和延迟优化缓冲区。增大这些值有助于应对高带宽、高延迟的网络环境,减少数据包丢失,但会占用更多内存。需要根据实际网络条件和可用内存进行精细调整。
配置正确的时区和时间同步
虽然不直接提升计算性能,但正确的时间配置对服务器至关重要,特别是在分布式系统、日志记录和事务处理中。使用NTP(网络时间协议)服务(如chronyd或ntpd)确保服务器时间与标准时间源同步。准确的时钟可以避免应用逻辑错误,简化故障排查,并为监控系统提供一致的时间戳,是维护服务器稳定性和数据一致性的基础。
4362

被折叠的 条评论
为什么被折叠?



