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配置,网上搜:高并发、内核调优

Apache调优的更多相关文章

  1. 第三篇、调优之路 Apache调优

    1.  简介 在第一篇中整合了apache + tomcat ,利用了apache解析静态文件为tomcat解压.但是在测试机上发现两者性能不足,不能充分利用服务器的性能,该篇中将对apache进行性 ...

  2. Apache调优(二)

    Apache调优(一) (1).Apache运行模式说明 Apache目前一共有三种稳定的MPM(Multi-Processing Module,多进程处理模块)模式:Prefork(进程模式).Wo ...

  3. LAMP之Apache调优

    一.环境的搭建 实验环境: 操作系统:Centos 7.4 [root@xuegod70 ~]# ls apr-1.6.3.tar.gz apr-util-1.6.1.tar.bz2 httpd-2. ...

  4. [Apache]网站页面静态化与Apache调优(图)

    ---------------------------------------------------------------------------------------------------- ...

  5. Apache调优(一)

    (1).Apache和Tomcat的关系 Apache HTTPD Server与Apache Tomcat同属于Apache的开源项目.两个都可以单独作为web server使用,但是又都有各自的特 ...

  6. apache调优技巧之一隐藏apahce版本信息

    如果你的服务器版本信息是这样的,是很 危险的. [root@xinsz63 httpd-2.2.27]# curl -I 192.168.1.38 HTTP/1.1 403 Forbidden Dat ...

  7. 【转】tomcat性能调优

    一.总结前一天的学习 从"第三天"的性能测试一节中,我们得知了决定性能测试的几个重要指标,它们是: ü   吞吐量 ü   Responsetime ü   Cpuload ü   ...

  8. 通向架构师的道路之 Tomcat 性能调优

    一.总结前一天的学习 从"第三天"的性能测试一节中,我们得知了决定性能测试的几个重要指标,它们是: 吞吐量 Responsetime Cpuload MemoryUsage 我们也 ...

  9. (转载)通向架构师的道路(第四天)之Tomcat性能调优-让小猫飞奔

    转载自:https://blog.csdn.net/lifetragedy/article/details/7708724 参考文章:tomcat以及常用web容器线程池的实现原理https://bl ...

随机推荐

  1. Spring+SpringMVC+Mybatis+MAVEN+Eclipse+项目完整环境搭建

    1.新建一个Maven项目,创建父项目. 2.创建子项目模块 3.创建javaWeb项目 4.创建后的项目目录结构 5.Maven文件配置 parent父项目pom.xml文件配置 <?xml ...

  2. js 求两个日期之间相差天数

    //求两个日期之间的相差天数 function daysBetween(DateOne, DateTwo) { var OneMonth = DateOne.substring(5, DateOne. ...

  3. 离线安装maven

    maven离线安装 1.在eclipse根目录下新建两个文件夹,links和myplugins,myplugins文件名可以自定义 2.下载maven http://pan.baidu.com/s/1 ...

  4. PHP实现动态生成饼状图、柱状图和折线图(转载)

    PHP在图像操作方面的表现非常出色,我们只需借助可以免费得到的GD库便可以轻松实现图.表勾画.下面将分别介绍PHP实现的饼状图.折线图和柱状图以 及他们的使用方法,这几段代码的特点就是不需要再把它们复 ...

  5. Spring事务管理中@Transactional的参数配置

    Spring作为低侵入的Java EE框架之一,能够很好地与其他框架进行整合,其中Spring与Hibernate的整合实现的事务管理是常用的一种功能. 所谓事务,就必须具备ACID特性,即原子性.一 ...

  6. 魅蓝3s adb interface 找不到驱动程序

    完全照搬大神的步骤就ok啦,,自己记录下,方便以后查找 Win7 x64 Eclipse无法识别手机 / adb interface有黄色感叹号,无法识别 http://blog.csdn.net/z ...

  7. JDBC与javaBean

    1.JDBC的概念: Java数据库连接技术(Java DataBase Connectivity)能实现java程序对各种数据库的访问, 由一组使用java语言编写的类 和 接口(jdbc api) ...

  8. 怎样导入SDWebImage

    Two ways : 方法1:copy all the files into your project. --下载https://github.com/rs/SDWebImage. --把SD项目co ...

  9. Qt Quick分组属性案例

    import QtQuick 2.4 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 import QtQuick.Win ...

  10. Android 4.4 上实现透明导航栏和状态栏 Translucent system bar

    Translucent system UI styling To get the most impact out of your content, you can now use new window ...