成都传智播客吧 关注:267贴子:2,257
  • 5回复贴,共1

关于Nginx+tomcat服务器配置性能调优

只看楼主收藏回复

前言
在项目功能完成后,项目部署到服务器是非常重要的一环。而在部署过程中将各个参数调整对于性能的提升是非常明显的。这样既可以节约硬件成本,又可以将相应时间缩短,又可以提高服务器的稳定性,可谓是一举三得。
服务器的优化是非常复杂的过程,主要是几个方面,服务器的安全提升、服务器的性能调优等等。单说性能优化,这关乎到语言的选择,框架的选择,服务器(linux/freebsd)等等的选择,而我们学习的是java语言,我们知道,单点tomcat在不使用nginx的情况下,能承载的最多也就是200-300的并发量,而加上了nginx之后,能大幅度提升服务器的并发承载量,不仅仅是因为nginx可以做负载均衡(load-banlance),更重要的是nginx可以让请求进行排队,而不是将压力赋予给tomcat,这样tomcat可以更加专注地完成业务操作,从而提高性能。
今天我们就来讲讲服务器最基本的参数调整提高服务器的性能– tomcat+nginx


1楼2018-07-13 11:13回复
    服务器的选择
    首先,我们来分析一下服务器的选择,看一看大公司是使用什么系统来进行部署,好的操作系统能提高好的性能、稳定性和安全性,而这些对大型网站的性能、安全性和稳定性都是至关重要的。淘宝网(阿里巴巴): Linux操作系统 + Web 服务器:Apache
    新浪:FreeBSD + Web 服务器:Apache
    Yahoo:FreeBSD + Web 服务器:自己的
    Google: 部分Linux + Web 服务器:自己的
    百度:Linux + Web 服务器: Apache
    网易:Linux + Web 服务器: Apache
    eBay: Windows Server 2003/8 (大量) + Web 服务器:Microsoft IIS
    MySpace: Windows Server 2003/8 + Web 服务器:Microsoft IIS
    由此可见,开源操作系统做Web应用是首选已经是一个既定事实。在开源操作系统中Linux和FreeBSD差不太多,很难说哪个一定比另外一个要优秀很多、能够全面的超越对手,应该是各有所长。但熟悉Linux的技术人员更多些,利于系统管理、优化等,所以Linux使用更广泛。而Windows Server和IIS虽然有的网站使用,但不开源,而且需要购买微软的一系列应用产品,限制了其使用。总之,开源操作系统,尤其是Linux做Web应用是首选已经是一个既定事实。虽然对linux服务器的优化也特别重要,今天我们不重要讲系统的优化,主要讲部署软件参数的优化


    2楼2018-07-13 11:15
    回复
      Nginx优化进程数的优化
      一般nginx中,进程数一般设置为服务器cpu核数的倍数,例如:CPU为双核,则设置进程数目为4或者8,每个nginx进程消耗的内存10兆的模样worker_processes 8;将进程分配给制定CPU假如是8核 cpu 分配如下:
      worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000
      00100000 01000000 10000000
      Nginx最大打开文件数当使用linux时,最大文件打开数是有限制的。在linux中可使用ulimit –n来查看最大文件打开数,一般设置值为系统最大文件打开数除以最大进程数,但是大多数都是除不尽,导致资源分配不均匀,所以最好与最大进程数一致worker_rlimit_nofile 655350;


      3楼2018-07-13 11:31
      回复
        use epoll;
        使用epoll 的I/O 模型补充说明:与apache相类,nginx针对不同的操作系统,有不同的事件模型A)标准事件模型Select、poll属于标准事件模型,如果当前系统不存在更有效的方法,nginx会选择select或pollB)高效事件模型Kqueue:使用于 FreeBSD 4.1+, OpenBSD 2.9+, NetBSD2.0 和 MacOSX. 使用双处理器的MacOSX系统使用kqueue可能会造成内核崩溃。Epoll: 使用于Linux内核2.6版本及以后的系统。/dev/poll:使用于 Solaris 7 11/99+, HP/UX 11.22+(eventport), IRIX 6.5.15+ 和 Tru64UNIX 5.1A+。Eventport:使用于 Solaris 10. 为了防止出现内核崩溃的问题,有必要安装安全补丁。
        最大连接数
        每个进程允许的最多连接数,理论上每台nginx服务器的最大连接数为worker_processes*worker_connections。worker_connections 655350;超时时间设置超时时间,使用 keepalive_timeout 90;
        客户端请求头部缓冲区大小客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求头的大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小。在Linux中,使用getconf PAGESIZE 来获得,并设置给nginxclient_header_buffer_size4k;打开文件缓存大小这个默认是没有开启的,此参数将为打开文件指定缓存大小open_file_cachemax=65535 inactive=60s;open_file_cachemax为最大缓存大小,inactive为缓存多久没使用就进行回收
        检查缓存有效信息时间open_file_cache_valid80s;
        open_file_cache_min_uses1;open_file_cache 指令中的inactive参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive时间内一次没被使用,它将被移除。


        4楼2018-07-13 11:32
        回复
          开启gzipgzip on;
          gzip_min_length 1k;
          gzip_buffers 4 16k;
          gzip_http_version 1.0;
          gzip_comp_level 2;
          gzip_types text/plain application/x-javascript text/css
          application/xml;
          gzip_vary on;
          缓存静态文件缓存静态文件:
          location ~* ^.+\.(swf|gif|png|jpg|js|css)$ {
          root /usr/local/ku6/ktv/show.ku6.com/;
          expires 1m;}


          5楼2018-07-13 11:32
          回复
            Tomcat性能优化
            1、 最大连接数最大线程等设置修改server.xmlmaxThreads:Tomcat使用线程来处理接收的每个请求。这个值表示Tomcat可创建的最大的线程数。acceptCount:指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。connnectionTimeout:网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。minSpareThreads:Tomcat初始化时创建的线程数。maxSpareThreads:一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程修改后示例:<Connector port="8082"protocol="HTTP/1.1" useBodyEncodingForURI="true" enableLookups="false"connectionTimeout="30000" maxConnections="2000" acceptCount="2000"maxThreads="1500" minSpareThreads="200" maxSpareThreads="1000"compression="on" compressionMinSize="2048" noCompressionUserAgents="gozilla, traviata"maxProcessors="1000" minProcessors="5"acceptorThreadCount="10" redirectPort="8443" />2、 启动参数设置修改/bin/catalina.sh,增加如下设置:JAVA_OPTS='-Xms【初始化内存大小】 -Xmx【可以使用的最大内存】'需要把这个两个参数值调大,大小的可以根据服务器内存的大小进行调整。例如:JAVA_OPTS='-Xms1024m –Xmx2048m'我们服务器是8G 内存,跑了3个tomcat服务,给分配了2G的内存。


            6楼2018-07-13 11:32
            回复