zoukankan      html  css  js  c++  java
  • Apache调优

       1、调整文件描述符大小,默认Linux系统的文件描述符是1024,对于squid等一些服务来说
                    在高负载的情况下这些文件描述符是远远不够的,所以在部署该类服务器时修改文件描述符是必要进行的操作

                    # ulimit –n                                          #查看文件描述符大小
                      1024  
                    # vim /etc/security/limits.conf             #添加下面两行,重启系统永久生效
                       *        soft     nofile     65536
                       *        hard     nofile     65536             

               2、Xshell、SSH等远程连接异常断开:这可能是由于SSH超时断开连接导致的,解决办法如下
                    # vim /etc/ssh/sshd_config         
                       ClientAliveInterval 60                       #去掉注释,ClientAliveInterval,对应的0改成60
                       ClientAliveCountMax 3                     #去掉注释,ClientAliveCountMax, 使用默认值3即可

                    # service sshd restart                        #重启sshd服务 

               3、内核参数优化
                    说明:本优化适合apache,nginx,squid等多种web应用,特殊的业务可能需要略做调整
        
                    # vim /etc/sysctl.conf
                      net.ipv4.tcp_syncookies = 1          #表示开启SYN Cookies;当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击
                      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       #修改系統默认的 TIMEOUT 时间,从60改成30 
                      net.ipv4.tcp_max_syn_backlog = 16384    #表示TCP三次握手建立阶段接受SYN请求队列的最大长度,默认为1024                                                       将其设置大一些可以使出现Nginx繁忙来不及accept新连接的情况时,Linux不至于丢失客户端发起的连接请求
                      net.ipv4.tcp_keepalive_time = 600  #启用keepalive时,TCP发送keepalive消息的频度,默认是2小时,设置小一些能更快地清理无效的连接
                      net.ipv4.tcp_sack = 1                     #使TCP只是重发丢失的数据包,不用发送后续的所有数据包,提高了数据的传输效率
                      net.ipv4.tcp_timestamps = 1          #以一种比重发超市更精确的方法来启用对RTT的计算
                      net.ipv4.tcp_window_scaling = 1    #启用 TCP 窗口伸缩使客户机能够以更高的速度下载数据
                      net.core.rmem_max = 16777216   #最大的TCP数据接收缓冲,增加 TCP接收缓冲区 
                      net.core.wmem_max = 16777216  #最大的TCP数据发送缓冲,增加 TCP发送缓冲区

                      net.ipv4.ip_local_port_range = 4000 65000  #定义了在UDP和TCP连接中本地(不包括连接的远端)端口的取值范围
                      
                      net.ipv4.tcp_max_tw_buckets = 36000        #表示操作系统允许TIME_WAIT套接字数量的最大值,如果超过这个数字,TIME_WAIT套接字
                      将立刻被清除并打印警告信息;该参数默认为180 000,过多的TIME_WAIT套接字会使Web服务器变慢
                      net.ipv4.route.gc_timeout = 100                  #路由缓存刷新频率,当一个路由失败后多长时间跳到另一个,默认是300 
                      net.core.somaxconn = 16384               #每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目
                      net.core.somaxconn限制到128,而nginx定义的NGX_LISTEN_BACKLOG默认为511,所以有必要调整这个值

                      net.core.netdev_max_backlog = 16384        #表示socket监听(listen)的backlog上限
                      backlog就是socket的监听队列,当一个请求(request)尚未被处理或建立时,他会进入backlog
                      net.ipv4.tcp_max_orphans = 16384            #系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上
                      这个限制仅仅是为了防止简单的DOS攻击,不能过分依赖,如果增加内存,就要增加这个值

                      net.ipv4.tcp_syn_retries = 1                       #对于一个新建连接,内核要发送多少个 SYN 连接请求才决定放弃
                      不应该大于255,默认值是5,对应于180秒左右,属于Nginx内核参数优化
                      net.ipv4.tcp_synack_retries = 1                 #为了打开对端的连接,内核需要发送一个SYN并附带一个回应前面一个SYN的ACK
                      即三次握手中的第二次握手,这个设置决定了内核放弃连接之前发送SYN+ACK包的数量
                      调整以上参数后再执行以下命令,让修改结果立即生效:/sbin/sysctl -p

                4、开启gzip压缩,修改httpd.conf配置文件(自己虚拟机安装路径为/etc/httpd/conf/httpd.conf)
                      LoadModule deflate_module modules/mod_deflate.so
                      LoadModule headers_module modules/mod_headers.so

                      将配置文件中上面两行的#去掉;这样apache就会启用这两个模块
                      其中mod_deflate是压缩模块,就是对要传输到客户端的代码进行gzip压缩
                      mod_headers模块的作用是告诉浏览器页面使用了gzip压缩
                      如果不开启mod_headers那么浏览器就会对gzip压缩过的页面进行下载,而无法正常显示

                    * 在配置文件中添加如下压缩配置:

                    # 压缩等级 9 //压缩等级越高,cpu开销也增多,压缩越厉害
                      DeflateCompressionLevel 4

                    # 压缩类型 html、xml、php、css、js 
                      SetOutputFilter DEFLATE
                      AddOutputFilterByType DEFLATE text/css text/javascript
                      AddOutputFilter DEFLATE js css

                5、配静态文件缓存
                   1)开启apache扩展模块mod_expires.so,在apache的配置文件中加入下面一行代码
                      LoadModule expires_module modules/mod_expires.so

                   2)配置缓存,在apache配置文件中加入下面一段代码
                                                                      配置缓存失效的时间
                                  ExpiresActive on
                                  ExpiresByType image/gif  "access plus 7 days"      规定哪些格式缓存多长时间失效
                                  ExpiresByType image/jpeg "access plus 7 days"
                                  ExpiresByType image/png "access plus 7 days"
                                  ExpiresByType text/css "now plus 3 days"
                                  ExpiresByType application/x-javascript "now plus 3 days"
                                  ExpiresByType application/x-shockwave-flash "now plus 3 days"
                                  ExpiresDefault "now plus 120 min"                        除了以上这些格式之外的不缓存
                      
                      # /usr/local/apache2/bin/apachectl -t                                检测错误
                      # /usr/local/apache2/bin/apachectl restart                         重启Apache

                6、避免使用域名跳转配置,域名跳转模块不用注释,不配置该模块就好了

                7、访问日志若不用记录,就不记录,若非要记录,一定要把图片等静态文件访问日志过滤出来,不记录图片
                      # vim  /etc/httpd/conf/httpd.conf 
                        ErrorLog "logs/error_log"            
                        SetEnvIf Request_URI .gif$ gif-image
                        SetEnvIf Request_URI .GIF$ gif-image
                        SetEnvIf Request_URI .jpg$ gif-image
                        SetEnvIf Request_URI .jpeg$ gif-image
                        SetEnvIf Request_URI .JPG$ gif-image
                        SetEnvIf Request_URI .png$ gif-image
                        SetEnvIf Request_URI .js$ gif-image
                        SetEnvIf Request_URI .bmp$ gif-image
                        SetEnvIf Request_URI .css$ gif-image
                        SetEnvIf Request_URI .mid$ gif-image
                        SetEnvIf Request_URI .swf$ gif-image
                        CustomLog "logs/access_log" combined env=!gif-image

                      # service httpd restart                                               重启Apache,看到日志记录的都没有图片文件
                      # cat /var/log/httpd/access_log                                查看日志

               8、日志切割 rotatelogs (Apache自带的工具)

                      rotatelogs是一个配合Apache管道日志功能使用的简单程序
           举例:CustomLog "|bin/rotatelogs /var/logs/logfile 86400" common

                      此配置会建立文件/var/logs/logfile.nnnn
                      其中的nnnn是名义上的日志启动时的系统时间(此时间总是回卷时间的倍数 
                      可以用于cron脚本的同步),在回卷时间到达时(在此例中是24小时以后),会产生一个新的日志

           举例:CustomLog "|/opt/apache/bin/rotatelogs /opt/apache/logs/access_log.%d-%m-%y 800M" common

                      此配置会在日志文件大小增长到800兆字节时回卷该日志,rotationtime日志文件回卷的以秒为单位的间隔时间

      Apache日志切割:# vim  /etc/httpd/conf/httpd.conf
                                       ErrorLog "/var/log/httpd/error_log"
                                       CustomLog "logs/access_log" combined env=!gif-image

                                       CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/access_log 86400" common
                                       CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/error_log 86400" common

                      # service httpd restart                                              重启Apache,看到日志记录的都没有图片文件
                      # cat /var/log/httpd/access_log                                查看日志

                9、在挂载文件系统的时候,使用 noatime 选项

                      在Linux下面挂载文件系统的时候设置noatime可以显著提高文件系统的性能
                      默认情况下,Linux ext2/ext3文件系统在文件被访问、创建、修改的时候记录下了文件的时间戳

                      比如:文件创建时间、最近一次修改时间和最近一次访问时间
                      系统运行的时候要访问大量文件,如果能减少一些动作(比如减少时间戳的记录次数等)
                      将会显著提高磁盘IO效率、提升文件系统性能,Linux提供了noatime这个参数来禁止记录最近一次访问时间戳

           设置:给文件系统挂载的时候加上noatime参数能大幅提高文件系统性能
                     修改设置后只需要重新挂载文件系统、不需要重启就可以应用新设置

                     # vim /etc/fstab
                        /dev/mapper/vg_appserver-LogVol02                        /                  ext4    defaults,noatime        1 1
                        UUID=58cfd42c-d876-4110-8025-ab7735a07f3b     /boot           ext4    defaults,noatime        1 2
                        /dev/mapper/vg_appserver-lv_root                          /var              ext4    defaults,noatime        1 2
                        /dev/mapper/vg_appserver-lv_swap                         swap            swap    defaults,noatime        0 0

                      # mount -o remount  /
                      # mount -o remount  /boot
                      # mount -o remount  /var
                      # mount

              10、在apache安装过程中的编译步骤通过添加参数,进行优化

                      --with-mpm=worke    选择apache mpm的模式为worker模式;因为worker模式原理是更多的使用
                      线程来处理请求,所以可以处理更多的并发请求,而系统资源的开销(内存)小于基于进程的MPM prefork

                      --enable-cache           启用基于URL间的内容动态缓存(内存或者磁盘),Cache尽量加上,提高apache性能
                      --enable-disk-cache    启用基于磁盘的缓冲管理器

                      --enable-mem-cache  基于内存的缓冲管理器,详情见:http://blog.sina.com.cn/s/blog_72c948d701019rqf.html
                      --enable-file-cache      提供文件描述符缓存支持,从而提高apache性能

                      --enable-rewrite         提供基于URL规则的重写功能,根据已知URL地址,转换其他想要的url地址                                   
                      --enable-ssl               使用安全套接字层(ssl)和传输层安全(tls)协议实现高强度加密传输,使支持https.

              11、httpd.conf其他项调整
                      # vim /etc/httpd/conf/httpd.conf 

                      timeout 120                  //指定客户端与服务器连接超时的时间间隔;超过这个时间服务器没响应,就断开连接
                      keepalive timeout   15   //一次连接多次请求之间的间隔时间,如果一次连接后
                      在完成一次请求后,在这个间隔时间之内,没有收到下一个请求就中断连接,以秒为单位
                      Mod_cache配置:开启缓存,详情见:http://www.gosoa.com.cn/apache缓存mod_cache配置

              12、调整线程,进程数,主要通过修改apache配置文件中的httpd-mpm.conf文件
                      
                      StartServers               8        //初始化进程数
                      MinSpareServers         5       //设置为5,但是页面中显示为6.其中有一个为守护进程:/etc/sbin/httpd
                      MaxSpareServers        20     //最大的空闲
                      ServerLimit                 1000  //最大值是2000,如果想设置更大的话需要编译时配置上ServerLimit这个参数
                      MaxClients        500    //修改最大连接数,默认最大250,在MaxClients前面设置ServerLimit,值大于MaxClients
                      MaxRequestsPerChild 10000

                      重启httpd后,通过反复执行pgrep httpd|wc -l来观察连接数
                      当连接数在达到MaxClients设值后不再增加,访问网站也顺畅,就可以不再修改了

              13、服务器性能评估ab          -c 并发个数 -n 请求个数,请求个数一定大于并发个数  
                      # ls /usr/local/apache/bin                      
                      # ulimit -n 10000         设置最多请求进程数
                                                
      服务器压力测试:# ab -c 10 -n 100 http://www.a.org/index.html
                                  # ab -r -c 1000 -n 10000 http://www.a.org/index.html

                       说明:-c 1000 每次并发1000个,-n 10000 共发送10000个请求
                                 测试失败个数为0,则是正常,失败个数不为0,你需要降低并发继续测试

    复制内容多的文件:# cp /var/log/messages /www/a.org/test.html                     
           再次压力测试:# ab -r -c 1000 -n 9000 http://www.a.org/test.html

              复制大数据:# dd if=/dev/zero of=/www/a.org/new.html bs=1M count=2
                 压力测试:# ab -r -c 1000 -n 9000 http://www.a.org/new.html
                        
       大并发测试调优:企业自建web缓存一般不用apache或者nginx
                                  都用varnish或者squid,大并发一般前面要用CDN来顶着,建议购买CDN
                                  并发数最主要就是调两个方向:内核参数和mpm配置,网上搜:高并发、内核调优

  • 相关阅读:
    Vue组件之间传值
    Vue 调试工具
    组件注册
    组件化思想
    图书列表案例
    数组相关API
    Vue常用特性
    选项卡案例
    Vue模板语法
    案例选项卡
  • 原文地址:https://www.cnblogs.com/zhangyin6985/p/6160339.html
Copyright © 2011-2022 走看看