【Linux】Linux操作系统内核及相关服务优化


系统基础优化

  • 关闭不需要的TTY

    ```

    vim /etc/init/start-ttys.conf文件

    env ACTIVE_CONSOLES=/dev/tty[1-6]修改为[1-2],然后重启机器即可。
    

    vim /etc/sysconfig/init

    ACTIVE_CONSOLES=/dev/tty[1-6]修改为[1-2] ```

  • 对TCP/IP网络参数进行调整

    ```

    echo \"net.ipv4.tcp_syncookies = 1\">>/etc/sysctl.conf

    sysctl -p

    增强对抗SYN Flood的能力。

    ```

  • 修改history记录数

    ```

    vim /etc/profile

    修改HISTSIZE值

    source /etc/profile

    刷新环境变量

    ```

  • 每当系统加载IPv6模块是强制执行/bin/true来代替实际加载的模块

    ```

    echo "install ipv6 /bin/true">/etc/modprobe.d/disable-ipv6.conf

    ```

  • 禁用基于ipv6网络

    echo "IPV6INIT=no">>/etc/sysconfig/network-scripts/ifcfg-eth0

  • 调整Linux最大文件打开数,否则允许squid服务的机器在高负载时执行性能将会很差;有时在部署应用时,会遇到“Too many open files”这样的问题,这个值也会影响服务器的最大并发数。

    ```

    vim /etc/security/limit.conf

    在文件尾部添加

    soft nofile 65535 hard nofile 65535
    

    vim /etc/rc.local

    在开机时执行命令

    ulimit -SHn 65535
    

    ```

  • 在web服务器的页面上有很多小图片,通常是没有必要记录的,这样就可以减少写磁盘的I/O值。

    ```

    修改/etc/fstab,然后,在包含大量小文件的分区中使用noatime,和nodiratime命令

    /dev/sda5 /data/pics ext3 noatime,nodiratime 0 0

    ```

  • 配置SSH登录

    ```

    不允许root用户通过远程登录

    将 PermitRootLogin yes 修改为 PermitRootLogin no

    禁止空密码登录

    取消掉 PermitEmptyPasswords no 的注释

    关闭SSH反向查询,加快SSH的访问速度

    将 UseDNS yes修改 UseDNS no ```

  • 增加具有sudo权限的用户

    ```

    visudo

    给admin用户所有root权限

    添加 admin   ALL=(ALL)    ALL
    

    ```

优化Linux下的内核TCP参数提高系统性能

  • 内核的优化和服务器优化一样,在Linux下高并发的Squid服务器中,TCP TIME_WAIT套接字的数量经常可达到两三万,服务器很容易被拖死。可以通过修改Linux内核参数来减少Squid服务器的TIME_WAIT数量,命令如下:

    ```

    vim /etc/sysctl.conf 添加以下参数:

    net.ipv4.tcp_syncookies = 1 # 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用Cookie来处理,可防范少量的SYN攻击。该参数默认为 0。 net.ipv4.tcp_fin_timeout = 30 # 表示如果套接字由本端要求关闭,那么这个参数将决定它保持在FIN-WAIT-2状态的时间 net.ipv4.tcp_keepalive_time = 1200 # 表示当keepalived启用时,TCP发送Keepalived消息的频度改为20分钟 net.ipv4.tcp_tw_reuse = 1 # 表示开启重用,即允许将TIME-WAIT套接字重新用于新的TCP连接。该参数默认为0,表示关闭。 net.ipv4.tcp_tw_recycle = 1 # 表示开启TCP连接中TIME-WAIT套接字的快速回收,该参数默认为0,表示关闭。 net.ipv4.tcp_local_port_range = 10000 65000 表示向外连接的接口范围。 net.ipv4.tcp_max_syn_backlog = 8192 表示SYN队列的长度,默认值为1024,此处修改为8192,可以容纳更多等待连接的网络连接数。 net.ipv4.tcp_max_tw_buckets = 5000 表示系统同时保持TIME_WAIT套接字的最大数量,TIME_WAIT套接字将立即清除并打印警告信息,默认值为180000,此处修改为5000(此参数对Squid来说,效果较为理想) ```

对于Apache或Nginx等Web服务器,则只需要修改以下几项即可:

    net.ipv4.tcp_syncookies = 1
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_tw_recycle = 1
    net.ipv4.tcp_local_port_range = 10000 65000

对于postfix邮件服务器,则建议内核优化方案如下:

    net.ipv4.tcp_fin_timeout = 30
    net.ipv4.tcp_keepalive_time = 300
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_tw_recycle = 1
    net.ipv4.tcp_local_port_range = 10000 65000
    kernel.shmmax = 134217728

Linux下CPU使用率与机器负载的关系与区别

CPU负载和CPU利用率虽然是两个不同的概念,但它们的信息可以显示在同一个top命令中。 > CPU利用率显示的是在运行期间实时占用的CPU百分比 CPU负载显示的则是一段时间内正在使用和等待使用CPU的平均任务数。CPU利用率高,并不意味着负载就一定大。