操作系统

Linux优化方法收集与整理

Jager · 4月4日 · 2014年 1156次已读

之前一直有博主要求整理下 VPS 主机优化方法,那么如果你是 VPS 主机(Linux),可以尝试一下了,尤其是 linux 系统的内核参数优化。

一、增加 SWAP 分区

VPS(Virtual Private Server 虚拟专用服务器)技术,将一部服务器分割成多个虚拟专享服务器的优质服务。每个 VPS 都可分配独立公网 IP 地址、独立操作系统、独立超大空间、独立内存、独立执行程序和独立系统配置等。

下面是配置过程中的一些笔记:

VPS 只有一个根分区,没有 swap 交换分区。VPS 内存不大,于是,我为其增加了一个 swap 交换文件。

1、进入一个目录

cd /var/

2、获取 256M 的文件块:

dd if=/dev/zero of=swapfile bs=1024 count=262144

3、创建 swap 文件

/sbin/mkswap swapfile

4、激活 swap 文件

/sbin/swapon swapfile

5、查看一下 swap 是否正确:

/sbin/swapon -s

6、加到 fstab 文件中让系统引导时自动启动

vi /etc/fstab

在末尾增加以下内容:

/var/swapfile swap swap defaults 0 0

Ps:这个方法在玛思阁以前的文章同样整理过,详见:给已安装的 Linux 新增 Swap 交换分区
--------------------------------------------------------------------------------

二、修改 Linux 系统时区

系统默认为美国东部时间,修改 Linux 时区为东八区

cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

以上摘自:http://www.jb51.net/article/16732.htm

三、Linux 内核参数优化

Linux 内核参数优化可以使用 sysctl 命令完成,但是命令只能临时生效,若要永久保留配置,我们就得编辑 sysctl.conf 这个文件了。先附上 sysctl.conf 详细参数说明

sysctl.conf 文件中参数设置及参考推荐值

proc/sys/net/core/wmem_max
最大 socket 写 buffer,可参考的优化值:873200
/proc/sys/net/core/rmem_max
最大 socket 读 buffer,可参考的优化值:873200
/proc/sys/net/ipv4/tcp_wmem
TCP 写 buffer,可参考的优化值: 8192 436600 873200
/proc/sys/net/ipv4/tcp_rmem
TCP 读 buffer,可参考的优化值: 32768 436600 873200
/proc/sys/net/ipv4/tcp_mem
同样有 3 个值,意思是:
net.ipv4.tcp_mem[0]:低于此值,TCP 没有内存压力.
net.ipv4.tcp_mem[1]:在此值下,进入内存压力阶段.
net.ipv4.tcp_mem[2]:高于此值,TCP 拒绝分配 socket.
上述内存单位是页,而不是字节.可参考的优化值是:786432 1048576 1572864
/proc/sys/net/core/netdev_max_backlog
进入包的最大设备队列.默认是 300,对重负载服务器而言,该值太低,可调整到 1000
/proc/sys/net/core/somaxconn
listen()的默认参数,挂起请求的最大数量.默认是 128.对繁忙的服务器,增加该值有助于网络性能.可调整到 256.
/proc/sys/net/core/optmem_max
socket buffer 的最大初始化值,默认 10K
/proc/sys/net/ipv4/tcp_max_syn_backlog
进入 SYN 包的最大请求队列.默认 1024.对重负载服务器,可调整到 2048
/proc/sys/net/ipv4/tcp_retries2
TCP 失败重传次数,默认值 15,意味着重传 15 次才彻底放弃.可减少到 5,尽早释放内核资源.
/proc/sys/net/ipv4/tcp_keepalive_time
/proc/sys/net/ipv4/tcp_keepalive_intvl
/proc/sys/net/ipv4/tcp_keepalive_probes
这 3 个参数与 TCP KeepAlive 有关.默认值是:
tcp_keepalive_time = 7200 seconds (2 hours)
tcp_keepalive_probes = 9
tcp_keepalive_intvl = 75 seconds
意思是如果某个 TCP 连接在 idle 2 个小时后,内核才发起 probe.如果 probe 9 次(每次 75 秒)不成功,内核才彻底放弃,认为该连接已失效.对服务器而言,显然上述值太大. 可调整到:
/proc/sys/net/ipv4/tcp_keepalive_time 1800
/proc/sys/net/ipv4/tcp_keepalive_intvl 30
/proc/sys/net/ipv4/tcp_keepalive_probes 3
/proc/sys/net/ipv4/ip_local_port_range
指定端口范围的一个配置,默认是 32768 61000,已够大.
net.ipv4.tcp_syncookies = 1
表示开启 SYN Cookies。当出现 SYN 等待队列溢出时,启用 cookies 来处理,可防范少量 SYN 攻击,默认为 0,表示关闭;
net.ipv4.tcp_tw_reuse = 1
表示开启重用。允许将 TIME-WAIT sockets 重新用于新的 TCP 连接,默认为 0,表示关闭;
net.ipv4.tcp_tw_recycle = 1
表示开启 TCP 连接中 TIME-WAIT sockets 的快速回收,默认为 0,表示关闭。
net.ipv4.tcp_fin_timeout = 30
表示如果套接字由本端要求关闭,这个参数决定了它保持在 FIN-WAIT-2 状态的时间。
net.ipv4.tcp_keepalive_time = 1200
表示当 keepalive 起用的时候,TCP 发送 keepalive 消息的频度。缺省是 2 小时,改为 20 分钟。
net.ipv4.ip_local_port_range = 1024 65000
表示用于向外连接的端口范围。缺省情况下很小:32768 到 61000,改为 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_WAIT 套接字数量,但是对于 Squid,效果却不大。此项参数可以控制 TIME_WAIT 套接字的最大数量,避免 Squid 服务器被大量的 TIME_WAIT 套接字拖死。

需要优化的朋友,可以参考上面的参数说明,并根据服务器实际负载来定制你的 sysctl.conf 文件,下面贴上一个针对 nginx 内核参数优化的例子,仅供参考(待补充):

net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.ipv4.tcp_max_tw_buckets = 6000
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rmem = 4096 87380 4194304
net.ipv4.tcp_wmem = 4096 16384 4194304
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.netdev_max_backlog = 262144
net.core.somaxconn = 262144
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_keepalive_time = 30
net.ipv4.ip_local_port_range = 1024 65000

将以上代码添加到 sysctl.conf 文件的最后,然后执行/sbin/sysctl -p 即可生效。

三、关闭多余 tty,释放内存

linux 默认会启动 6 个 TTY 控制台,都需要常驻占用内存(1tty 占用 4M 多的样子),事实上没必要需要使用这么多 tty,个人 vps,仅需 1~2 个 tty 即可。

Centos5.* 设置 tty 数量:

①、编辑 /etc/inittab,找到 tty [1-6] 改成 tty [1-2]

②、编辑 /etc/sysconfig/init,同样将 tty [1-6] 改成 tty [1-2]

重启系统即可生效(建议先不重启,等后续操作完成一起重启即可);

CentOS 6.* 设置 tty 数量:

CentOS 6.0 开始 TTY 的配置由 /etc/inittab 更改为 /etc/init/start-ttys.conf,所以上面的第①步变为:

①、编辑 /etc/init/start-ttys.conf,找到 tty [1-6] 改成 tty [1-2]

②同上编辑即可

四、关闭 ipv6

ipv6 一般都用不到,完全关闭即可。

编辑 /etc/modprobe.d/dist.conf 文件,在最后追加:

alias net-pf-10 off

alias ipv6 off

然后重启系统即可(某些发行版可能是/etc/modprobe.conf 文件)。

五、关闭多余启动项

执行  chkconfig --list | grep :on  列出启动项:

Linux优化方法收集与整理

 

然后找到不需要启动的项目,执行 chkconfig 程序名 off 即可.

比如,ip6tables 是 ipv6 防火墙,用不到,执行  chkconfig ip6tables off ,然后执行 service ip6tables stop 即可彻底关闭 ip6tables 这个多余进程。

其余进程,请先查清楚作用,再来操作,以免出错。

暂时就整理这么多,后续发现更多的优化设置,再来追加~

15 条回应
  1. 奋斗的海棠果 2014-4-5 · 8:21

    不错 技术贴 会给很多人带来帮助

    • avatar
      Jager 2014-4-6 · 17:35

      希望有人会用到~~

  2. 三日月 2014-4-5 · 11:30

    额,最近都是linux的节奏啊,我终于备案好了

    • avatar
      Jager 2014-4-6 · 17:35

      先恭喜一下拉~~

      • 三日月 2014-4-6 · 20:40

        [嘻嘻] 我苦逼的继续PS抠图了,做东西

        • avatar
          Jager 2014-4-6 · 21:45

          早点认识你,就可以要你帮忙做个logo了~~
          对了,最近我们公司在征集logo,奖品是1000元还是多少,有没有兴趣?

          • 三日月 2014-4-6 · 22:19

            可以啊

          • 三日月 2014-4-6 · 22:19

            要求啥样的

            • avatar
              Jager 2014-4-6 · 22:24

              明天发给你,奖金还不错。

              • 三日月 2014-4-6 · 22:28

                好的,不错 [嘻嘻]

  3. 汇感之舟 2014-4-6 · 14:44

    Linux系统一直没用过呢 感觉没w好用

  4. 鹏晖鵀游兮 2014-4-6 · 16:27

    博主大人,你好!很想与贵站交换友情链接,盼望长期合作,我站已为您站添加好了友链(网站右侧,如您想要底部我乐意为您修改)。望博主审核,并希望此申请能得到批准!
    网站名称:谭晖博客
    网站地址:http://www.tanhui.org.cn/
    网站简介:谭晖个人博客网站,用于记录生活的点点滴滴,分享人生的平平淡淡,是你我的诉说与交流!
    倘若鄙站不符合贵站要求还请博主给予回复和建议,万分感谢!

  5. 每日一笑 2014-4-6 · 16:49

    下午好

  6. 赚五十任务站大全30个 2014-4-6 · 18:13

    都是代码啊