当前位置: 首页 > 科技观察

Linux生产服务器优化经验

时间:2023-03-16 21:28:45 科技观察

生产环境的Linux服务器对准确性、稳定性、效率和安全性都有要求,优化的技巧也很多。本文分享优化Linux生产服务器的九个常用经验,涵盖邮件服务器、Web服务器、网络配置、内存管理等。1.时间同步生产环境中的服务器要求时间准确。由于时间问题,我的邮件服务器的dovecot服务曾经自动停止服务。建议编辑vim/etc/crontab每天自动与ntp时间服务器同步时间。一次:1404***root/usr/sbin/ntpdatentp.api.bz>/dev/null2>&1二、在内核中启用SYNcookie保护:echo"1">/proc/sys/net/ipv4/tcp_syncookiesexecution以下命令使内核配置立即生效:/sbin/sysctl-p3.squidserver速度变慢的解决方法如果你的生产服务器是squidcacheserver,当你发现系统出现问题时可以输入以下命令慢或者网页慢:netstat-n|awk'/^tcp/{++S[$NF]}END{for(ainS)printa,S[a]}'这个命令可以对网络连接进行分类总结当前系统的状态,分析系统变慢的原因。对于Linux下的高并发squid服务器,TCPTIME_WAITsockets的数量往往达到2万到3万,服务器很容易被拖死。通过修改Linux内核参数,可以减少Squid服务器的TIME_WAIT套接字数量。将以下行添加到vim/etc/sysctl.conf:net.ipv4.tcp_fin_timeout=30net.ipv4.tcp_keepalive_time=1200net.ipv4.tcp_tw_reuse=1net.ipv4.tcp_tw_recycle=1net.ipv4.ip_local_port_range=102465000net.ipv4.tcp_netp_4backlogsyn.tcp_max_tw_buckets=5000说明:net.ipv4.tcp_tw_reuse=1表示启用重用。允许TIME-WAIT套接字被重新用于新的TCP连接,默认为0,表示关闭;net.ipv4.tcp_tw_recycle=1表示开启TCP连接中TIME-WAITsockets的快速回收,默认为0,表示关闭。net.ipv4.tcp_fin_timeout=30表示如果socket被本端关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。net.ipv4.tcp_keepalive_time=1200表示启用keepalive时TCP发送keepalive报文的频率。默认为2小时,将其更改为20分钟。net.ipv4.ip_local_port_range=102465000指示传出连接的端口范围。默认很小,改成1024到65000。net.ipv4.tcp_max_syn_backlog=8192表示SYN队列的长度,默认是1024,增加队列长度到8192可以容纳更多等待连接的网络连接。net.ipv4.tcp_max_tw_buckets=5000表示系统同时维持TIME_WAIT套接字的最大数量。如果超过这个数字,TIME_WAIT套接字将被立即清除并打印一条警告消息。默认是180000,改成5000。对于Apache、Nginx等服务器,上面几行的参数可以很好的减少TIME_WAITsockets的数量,但是对于squid,效果不是很好。这个参数可以控制TIME_WAITsockets的最大数量,防止squid服务器被大量的TIME_WAITsockets拖死。执行以下命令使内核配置立即生效:/sbin/sysctl-p4.Nginx服务器如果服务器是Nginx负载均衡器或者Nginx+PHP5的web服务器,这两项也必须开启:net.ipv4.tcp_tw_reuse=1#允许新的TCP连接重用TIME-WAITsocketsnet.ipv4.tcp_tw_recycle=1#启用TCP连接中TIME-WAITsockets的快速回收执行以下命令使内核配置立即生效:/sbin/sysctl-p5.调整Linux***文件打开数。Linux***文件打开数的默认值很低,必须修改得更高,否则高负载下squid服务器的执行性能会很低。vim/etc/security/limit.conf,在第一行添加*softnofile60000*hardnofile65535。值得注意的是,Linux系统的打开文件数不能通过命令ulimit-SHn改变,写入/etc/rc.d/rc.local也是不行的。6.只开启必要的服务只开启必要的服务,其他的可以关闭。可以打开下面列出的服务:crondirqbalancemicrocode_ctlnetworkrandomsshdsyslogipt??ables这是待定的。如果前端有硬件防火墙;这也可以关闭,但反之则不行。下面的命令可以检查运行在第5级的服务,以此类推在第3级将其删除。servicecupsstopchkconfigcupsoffchkconfig这个命令会关闭3级和5级服务。7、网上运行ipv6的Linux服务器大多是64位的CentOS。在CentOS中默认启用ipv6。因为我们不用ipv6,所以停止ipv6可以最大程度保证安全和速度。vim/etc/modprobe.conf修改这个配置文件,在文末添加如下一行:aliasnet-pf-10offaliasipv6offecho"IPV6INIT=no">>/etc/sysconfig/network-scripts/ifcfg-eth08.启用RHEL网卡激活方式如果服务器系统为RHEL,需要将RHEL的默认网卡激活方式设置为ONBOOT。感觉这也是RHEL的一个小bug:笔者为客户维护的某RHEL应用服务器有六块网卡。关闭ONBOOT时,有的启动有的不启动,汗。这个问题我还专门问过客户,客户回答:我买多了...vim/etc/sysconfig/network-scripts/ifcfg-eth0,eth1eth1是第二块网卡,其他依此类推。ONBOOT=YES然后重启网络服务使servicenetworkrestart生效九、Linux内存管理Linux内存管理方式不同于windows,它的原则是有多少就用多少。很多linux新手喜欢用命令free-m观察,发现free没有了就想办法优化内存;事实上,他们已经进入了一个误区。通过一些精心的设计,除了缓存dentry(在VFS中用于加速文件路径名到inode的转换)之外,还采用了两种主要的Cache方式:BufferCache和PageCache。前者用于磁盘块的读写,后者用于文件inode的读写。这些Cache有效地缩短了I/O系统调用(如read、write、getdents)的时间。所以建议内存管理要顺其自然。