zoukankan      html  css  js  c++  java
  • linux系统优化

    写在前面

    • 本文环境
    [root@temp ~]# cat /etc/redhat-release 
    CentOS Linux release 7.5.1804 (Core) 
    [root@temp ~]# uname -r
    3.10.0-862.el7.x86_64
    

    基础优化

     1. 为rm命令修改别名,防止误操作。

    [root@temp ~]# echo "alias rm='rm is not used'" >>/etc/bashrc
    [root@temp ~]# source /etc/bashrc
    

     2. 个性化修改你命令提示符,可以把用户部分修改为刺眼的红色,时刻警醒。

    [root@temp ~]# echo 'export PS1="[e[37;40m][[e[31;40m]u[e[37;40m]@h [e[33;40m]w[e[0m]]\$ "' >>/etc/profile
    [root@temp ~]# source /etc/profile
    

     3. 使用国内yum源,下载软件时会迅速些,当然也可以自建yum仓库。这里以阿里云为例。

    [root@temp ~]# cd /etc/yum.repos.d/
    [root@temp ~]# mv CentOS-Base.repo CentOS-Base.repo.bak &>/dev/null
    [root@temp ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    [root@temp ~]# yum makecache fast
    

     4. 关闭selinux,现在阿里云安装的centos默认已经关闭了selinux。至于iptables,视情况而定。

    [root@temp ~]# sed -i.bak 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config &>/dev/null
    [root@temp ~]# setenforce 0
    

     5. 安装一些常用的软件。

    [root@temp ~]# yum -y install epel-release
    [root@temp ~]# yum -y install tree lrzsz nmap nc telnet vim wget lsof net-tools bash-completion bash-completion-extras psmisc bind-utils sysstat htop yum-utils
    

     6. 关闭用不到的服务。

    # 工作环境我们一般都是手动配置网络,系统自带的网络工具直接禁用掉,防止混淆。postfix也禁用掉,不然定时任务会频繁发邮件(/var/spool/clientmquene),占用系统inode。
    [root@temp ~]# systemctl stop NetworkManager postfix.service
    [root@temp ~]# systemctl disable NetworkManager postfix.service
    

     7. 设置vim中Tab键两个空格,写脚本的时候排版看着更加舒服。(个人爱好,轻点喷)

    [root@temp ~]# echo -e '
    set tabstop=2
    set softtabstop=2
    set shiftwidth=2
    set expandtab
    set autoindent' >>/etc/vimrc
    

     8. 定时任务设置时间同步,工作环境如有需要可以自行搭建NTP服务。生产环境中服务器的时间要求强一致,否则会导致应用运行异常,日志时间也是异常的。

    [root@temp ~]# echo '# time sync' >/var/spool/cron/root
    [root@temp ~]# echo '*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null' >>/var/spool/cron/root
    

     9. 禁止root用户登录

    [root@temp ~]# sed -i.bak 's@#PermitRootLogin yes@PermitRootLogin yes@g' /etc/ssh/sshd_config
    

     10. 修改系统的限制。

      a) 限制文件描述符

    # Linux下所有进程允许打开的文件描述符数量:
    [root@temp ~]# cat /proc/sys/fs/file-max     # 查询
    95474
    [root@temp ~]# echo 65536 >/proc/sys/fs/file-max        # 临时修改
    [root@temp ~]# echo 'fs.file-max = 65536' >>/etc/sysctl.conf    # 永久设置
    # Linux下单个进程允许打开的最大文件描述符数量:
    [root@temp ~]# ulimit -n         # 查看,默认查看的是soft limit,跟ulimit -Sn是一个意思;查看hard limit的命令是ulimit -Hn
    1024
    [root@temp ~]# ulimit -n 65535    # 临时修改。(同时修改soft limit和hard limit)
    [root@temp ~]# vim /etc/security/limits.conf         # 永久修改
    # * 表示针对所有用户。
    # hard:严格设置 。必定不能超过这个设定值
    # soft:警告设置。可以超过这个设定值,但是会有警告信息。
    # soft limit不能大于hard limit
    * soft nofile 65535    
    * hard nofile 65535
    

      b) 限制打开进程数。

    [root@temp ~]# ulimit -u            # 用法和上面的ulimit -n一致
    3812
    # 永久修改的设定也和上面的设置规则一样,只不过限制进程是nproc。
    [root@temp ~]# vim /etc/security/limits.conf         # 永久修改
    * soft nproc 65535    
    * hard nproc 65535
    # 这里有个坑就是20-nproc.conf也设置了nproc,如果limits.conf中设置了nproc,可以直接把这个配置文件删除掉。
    [root@temp ~]# cat /etc/security/limits.d/20-nproc.conf 
    # Default limit for number of user's processes to prevent
    # accidental fork bombs.
    # See rhbz #432903 for reasoning.
    *          soft    nproc     4096
    root       soft    nproc     unlimited
    # 注意1:nproc可以设置为unlimited,而nofile不可以。
    # 注意2:limit修改后并非是必须重启系统才生效。修改后新启动的进程会使用新的limit限制,而旧进程还是会使用旧限制,只按需重启相应的进程就可以生效了。
    

     11.为系统的重要文件添加不能修改的权限。

    [root@temp ~]# chattr +i /etc/passwd /etc/shadow
    

    内核优化

     1. 开启SYN cookies,防止部分SYN攻击,默认为0关闭的状态。

    # 临时修改。其它参数临时修改的方式也是一样。
    [root@temp ~]# sysctl -w net.ipv4.tcp_syncookies = 1
    # 永久修改。永久修改内核参数都需要写入到/etc/sysctl.conf文件中,并用-p参数生效。
    [root@temp ~]# echo 'net.ipv4.tcp_syncookies = 1' >>/etc/sysctl.conf
    [root@temp ~]# sysctl -p
    # 如果是写入的子目录,比如下面,则需要指定文件路径进行加载
    [root@temp ~]# echo 'net.ipv4.tcp_syncookies = 1' >>/etc/sysctl.d/lala.conf
    [root@temp ~]# sysctl -p /etc/sysctl.d/lala.conf
    

     2. Time wait优化,就是四次挥手没断干净(需要2个MSL),还占用连接的资源,

    # 开启TCP连接中TIME WAIT sockets的快速回收,默认为0,表示关闭。此参数对客户端和服务端同时起作用。
    net.ipv4.tcp_tw_recycle = 1
    # 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭。此参数支队客户端起作用。
    net.ipv4.tcp_tw_reuse = 1
    # 表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN WAIT 2状态的时间。
    net.ipv4.tcp_fin_timeout = 30
    # 注意1: tw_reuse,tw_recycle 必须在客户端和服务端 timestamps 开启时才管用(默认打开)
    # 注意2:一般情况下只用开启tw_reuse就可以了。前提是资源不够的时候,才会重用TIME WAIT连接。
    

     3. 向外提供的端口范围。默认是范围是32768到61000,。

    net.ipv4.ip_local_port_range = 1024 65000
    

     4. 修改SYN队列的长度,默认是1024。加大后可以容纳更多的SYN等待连接。

    net.ipv4.tcp_max_syn_backlog = 8500
    

     5. 定义了系统中每一个端口最大的监听队列的长度, 对于一个经常处理新连接的高负载 web服务环境来说,默认的 128 太小了。

    net.core.somaxconn = 262144
    

     6. 此参数指定了最大同时保持的Time_wait的数量,如果超过这个数字,Time_wait连接将立刻被清除并打印警告信息。

    net.ipv4.tcp_max_tw_buckets = 36000
    

     7. 决定了二次握手时发送ack+syn的数量,就是发送几次ack+syn后没收到第三次握手的ack消息,就放弃这个连接。

    net.ipv4.tcp_synack_retries = 2
    

     8. 用来限制监听(LISTEN)队列最大数据包的数量,超过这个数量就会导致链接超时或者触发重传机制。

    net.core.somaxconn = 16384
    

     9. 每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。

    net.core.netdev_max_backlog = 16384
    

     10. 这个值表示系统所能处理不属于任何进程的socket数量。系统内存充足的情况下,可以增加这个值。

    net.ipv4.tcp_max_orphans = 16384
    

     11.接收套接字缓冲区大小的默认值(以字节为单位)。

    net.core.rmem_default = 262144
    

     12. 接收套接字缓冲区大小的最大值(以字节为单位)。

    net.core.rmem_max = 16777216
    

     13. 发送套接字缓冲区大小的默认值(以字节为单位)。

    net.core.wmem_default = 262144
    

     14. 发送套接字缓冲区大小的最大值(以字节为单位)。

    net.core.wmem_max = 16777216
    


    未完待续......


    写作不易,转载请注明出处,谢谢~~

  • 相关阅读:
    [Machine Learning]Numpy
    [LeetCode]Valid Palindrome
    [LeetCode]Remove Linked List Elements
    [LeetCode]Reverse Linked List
    [LeetCode]Palindrome Number
    Spring绑定请求参数过程以及使用@InitBinder来注册自己的属性处理器
    servlet温故知新
    线程池简单实现
    JAVA NIO学习笔记
    XSS攻击简单介绍
  • 原文地址:https://www.cnblogs.com/ccbloom/p/11355014.html
Copyright © 2011-2022 走看看