Linux下使用Tomcat7搭建高性能Java服务器

来源:互联网 发布:邮件 rss源码 编辑:程序博客网 时间:2024/06/05 04:14

1. 架构说明: nginx + 4个tomcat

nginx作为前端代理,并且肩负负载均衡的作用,多个tomcat可以解决单台服务器高并发的性能问题,至于后端放几个tomcat要看你的服务器有多大内存,我的服务器是4核的CPU,8G内存。

 

2. nginx安装简单说明:

编译参数:

--prefix=/opt/mysql/ --enable-assembler --with-extra-charsets=complex \

--enable-thread-safe-client --with-big-tables --with-readline --with-ssl --with-embedded-server \

--enable-local-infile --with-plugins=innobase

可以根据自己的环境修改配置

 

nginx.conf配置:

 

Nginx conf代码  收藏代码
  1. user  www;  
  2. worker_processes    8;  
  3. error_log   /opt/logs/nginx/default/error/log;  
  4.   
  5. pid        logs/nginx.pid;  
  6.   
  7. worker_rlimit_nofile    51200;   
  8.   
  9. events {  
  10.     use epoll;  
  11.     worker_connections  1024; #有的设置到65535  
  12. }  
  13.   
  14. http {  
  15.   
  16.     include mime.types;  
  17.     default_type    application/octet-stream;  
  18.   
  19.     server_names_hash_bucket_size   128;  
  20.     client_header_buffer_size       128k;  
  21.     large_client_header_buffers 8   128k;  
  22.     client_max_body_size    200m;  
  23.     client_body_buffer_size 128k;  
  24.     proxy_connect_timeout   600;  
  25.     proxy_read_timeout  600;  
  26.     proxy_send_timeout  600;  
  27.     proxy_buffer_size   16k;  
  28.     proxy_buffers   4   32k;  
  29.     proxy_busy_buffers_size 64k;  
  30.     log_format main '$remote_addr $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"';  
  31.     access_log   /opt/logs/nginx/default/access/log main;  
  32.   
  33.     sendfile       on;  
  34.     tcp_nopush     on;  
  35.     tcp_nodelay    on;  
  36.   
  37.     keepalive_timeout   65;  
  38.   
  39.     fastcgi_connect_timeout 300;  
  40.     fastcgi_send_timeout 300;  
  41.     fastcgi_read_timeout 300;  
  42.     fastcgi_buffer_size 64k;  
  43.     fastcgi_buffers 4 64k;  
  44.     fastcgi_busy_buffers_size 128k;  
  45.     fastcgi_temp_file_write_size 128k;  
  46.   
  47.     gzip  on;  
  48.     gzip_min_length     1k;  
  49.     gzip_buffers        4 16k;  
  50.     gzip_comp_level     8;  
  51.     gzip_http_version   1.1;  
  52.     gzip_types      text/plain  application/xml;  
  53.     gzip_vary       on;  
  54.   
  55.     proxy_temp_path /opt/nginx_cache/proxy_temp_path;  
  56.     proxy_cache_path  /opt/nginx_cache/proxy_cache_path levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;  
  57.   
  58.     upstream testservers {   
  59.         server 127.0.0.1:8080 weight=1 max_fails=2 fail_timeout=30s;   
  60.         server 127.0.0.1:8081 weight=1 max_fails=2 fail_timeout=30s;  
  61.         server 127.0.0.1:8082 weight=1 max_fails=2 fail_timeout=30s;  
  62.         server 127.0.0.1:8083 weight=1 max_fails=2 fail_timeout=30s;  
  63.     }  
  64.    
  65.     server {  
  66.         listen  80;  
  67.         server_name test.com;  
  68.   
  69.         index index.html index.htm index.php index.jsp;  
  70.   
  71.         charset utf-8;  
  72.   
  73.         location ~ .*\.(js|jpg|JPG|jpeg|JPEG|bmp|gif|GIF)$ {  
  74.   
  75.             proxy_cache cache_one;  
  76.             proxy_cache_valid 200 304 1h;  
  77.             proxy_cache_valid 301 302 1m;  
  78.             proxy_cache_valid any 1m;  
  79.             proxy_cache_key $host$uri$is_args$args;  
  80.   
  81.             proxy_pass          http://testervers;  
  82.             proxy_redirect      default;  
  83.             proxy_set_header    X-Forwarded-For            $proxy_add_x_forwarded_for;  
  84.             proxy_set_header    X-Real-IP $remote_addr;  
  85.             proxy_set_header    Host $http_host;  
  86.             proxy_set_header    Range $http_range;  
  87.   
  88.             proxy_next_upstream http_502 http_504 error timeout invalid_header;  
  89.         }  
  90.           
  91.         location / {  
  92.   
  93.             proxy_pass          http://testservers;  
  94.             proxy_redirect      default;  
  95.             proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;  
  96.             proxy_set_header    X-Real-IP $remote_addr;  
  97.             proxy_set_header    Host $http_host;  
  98.             proxy_set_header    Range $http_range;  
  99.   
  100.             proxy_next_upstream http_502 http_504 error timeout invalid_header;  
  101.         }  
Nginx conf代码  收藏代码
  1.                 # 对管理后台进行访问限制  
  2.         location ^~/manager/ {  
  3.             allow 你的IP;  
  4.             deny all;  
  5.   
  6.             proxy_pass          http://testservers;  
  7.             proxy_redirect      default;  
  8.             proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;  
  9.             proxy_set_header    X-Real-IP $remote_addr;  
  10.             proxy_set_header    Host $http_host;  
  11.             proxy_set_header    Range $http_range;  
  12.   
  13.             proxy_next_upstream http_502 http_504 error timeout invalid_header;  
  14.   
  15.         }  
  16.   
  17.         }  
  18.     }  
  19.   
  20. }  

 

从上面配置可以看出,nginx会把http请求均匀分发给8080,8081,8082,8083几个端口的后端服务,实现负载均衡的效果。

 

3.  Tomcat 配置

 

server.xml配置,由于一个<Service></Service>会启动一个实例,所以我们这里要启动4个tomcat实例就设置4个Service :

 

Xml代码  收藏代码
  1. <?xml version='1.0' encoding='utf-8'?>  
  2. <Server port="8005" shutdown="SHUTDOWN">  
  3.   <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />  
  4.   <Listener className="org.apache.catalina.core.JasperListener" />  
  5.   <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />  
  6.   <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />  
  7.   <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />  
  8.   
  9.   <GlobalNamingResources>  
  10.     <Resource name="UserDatabase" auth="Container"  
  11.               type="org.apache.catalina.UserDatabase"  
  12.               description="User database that can be updated and saved"  
  13.               factory="org.apache.catalina.users.MemoryUserDatabaseFactory"  
  14.               pathname="conf/tomcat-users.xml" />  
  15.   </GlobalNamingResources>  
  16.   
  17.   <Service name="Catalina0">  
  18.     <Connector port="8080" protocol="HTTP/1.1"   
  19.                minSpareThreads="100"  
  20.                acceptCount="1000"    
  21.                connectionTimeout="50000"   
  22.                maxThreads="3000"   
  23.                disableUploadTimeout="true"  
  24.                URIEncoding="UTF-8"   
  25.                redirectPort="8443" />  
  26.     <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />  
  27.     <Engine name="Catalina" defaultHost="localhost">  
  28.       <Realm className="org.apache.catalina.realm.LockOutRealm">  
  29.         <Realm className="org.apache.catalina.realm.UserDatabaseRealm"  
  30.                resourceName="UserDatabase"/>  
  31.       </Realm>  
  32.       <Host name="localhost"  appBase="/opt/www/webapps"  
  33.             unpackWARs="true" autoDeploy="true">  
  34.       </Host>  
  35.     </Engine>  
  36.   </Service>  
  37.       
  38.   <Service name="Catalina1">  
  39.     <Connector port="8081" protocol="HTTP/1.1"   
  40.                minSpareThreads="100"  
  41.                acceptCount="1000"    
  42.                connectionTimeout="50000"   
  43.                maxThreads="3000"   
  44.                disableUploadTimeout="true"  
  45.                URIEncoding="UTF-8"   
  46.                redirectPort="8444" />  
  47.     <Connector port="8010" protocol="AJP/1.3" redirectPort="8444" />  
  48.     <Engine name="Catalina" defaultHost="localhost">  
  49.       <Realm className="org.apache.catalina.realm.LockOutRealm">  
  50.         <Realm className="org.apache.catalina.realm.UserDatabaseRealm"  
  51.                resourceName="UserDatabase"/>  
  52.       </Realm>  
  53.       <Host name="localhost"  appBase="/opt/www/webapps"  
  54.             unpackWARs="true" autoDeploy="true">  
  55.       </Host>  
  56.     </Engine>  
  57.   </Service>    
  58.     
  59.   <Service name="Catalina2">  
  60.     <Connector port="8082" protocol="HTTP/1.1"   
  61.                minSpareThreads="100"  
  62.                acceptCount="1000"    
  63.                connectionTimeout="50000"   
  64.                maxThreads="3000"   
  65.                disableUploadTimeout="true"  
  66.                URIEncoding="UTF-8"   
  67.                redirectPort="8445" />  
  68.     <Connector port="8011" protocol="AJP/1.3" redirectPort="8445" />  
  69.     <Engine name="Catalina" defaultHost="localhost">  
  70.       <Realm className="org.apache.catalina.realm.LockOutRealm">  
  71.         <Realm className="org.apache.catalina.realm.UserDatabaseRealm"  
  72.                resourceName="UserDatabase"/>  
  73.       </Realm>  
  74.       <Host name="localhost"  appBase="/opt/www/webapps"  
  75.             unpackWARs="true" autoDeploy="true">  
  76.       </Host>  
  77.     </Engine>  
  78.   </Service>  
  79.   <Service name="Catalina3">  
  80.     <Connector port="8083" protocol="HTTP/1.1"   
  81.                minSpareThreads="100"  
  82.                acceptCount="1000"    
  83.                connectionTimeout="50000"   
  84.                maxThreads="3000"   
  85.                disableUploadTimeout="true"  
  86.                URIEncoding="UTF-8"   
  87.                redirectPort="8446" />  
  88.     <Connector port="8011" protocol="AJP/1.3" redirectPort="8446" />  
  89.     <Engine name="Catalina" defaultHost="localhost">  
  90.       <Realm className="org.apache.catalina.realm.LockOutRealm">  
  91.         <Realm className="org.apache.catalina.realm.UserDatabaseRealm"  
  92.                resourceName="UserDatabase"/>  
  93.       </Realm>  
  94.       <Host name="localhost"  appBase="/opt/www/webapps"  
  95.             unpackWARs="true" autoDeploy="true">  
  96.       </Host>  
  97.     </Engine>  
  98.   </Service>  
  99. </Server>  
 

然后可以设置tomcat为Linux的服务,以便可以自动启动,创建权限为755的配置文件:/etc/init.d/tomcat,内容如下:

 

Shell代码  收藏代码
  1. #!/bin/bash  
  2. #  
  3. # tomcatd      This shell script takes care of starting and stopping  
  4. #             standalone tomcat  
  5. #  
  6. # chkconfig: 345 91 10  
  7. # description:  tomcat service  
  8. # processname: tomcat  
  9. # config file:  
  10.   
  11. # Source function library.  
  12. . /etc/rc.d/init.d/functions  
  13.   
  14. # Source networking configuration.  
  15. . /etc/sysconfig/network  
  16.   
  17. # Check that networking is up.  
  18. [ ${NETWORKING} = "no" ] && exit 0  
  19.   
  20. prog=tomcat  
  21.   
  22. export JAVA_HOME=/opt/jdk  
  23. export CATALINA_HOME=/opt/tomcat  
  24. export CATALINA_OPTS='-Xms2048m -Xmx2048m'  #初始化JVM内存可以自己根据情况设置  
Shell代码  收藏代码
  1. PATH=$PATH:$JAVA_HOME/bin  
  2.   
  3. STARTUP=$CATALINA_HOME/bin/startup.sh  
  4. SHUTDOWN=$CATALINA_HOME/bin/shutdown.sh  
  5.   
  6. if [ ! -f $CATALINA_HOME/bin/startup.sh ]  
  7. then  
  8.         echo "CATALINA_HOME for tomcat not available"  
  9.         exit  
  10. fi  
  11.   
  12. start() {  
  13.         # Start daemons.  
  14.   
  15.         echo -n $"Startting tomcat service: "  
  16.         daemon $STARTUP  
  17.         RETVAL=$?  
  18.         return $RETVAL  
  19. }  
  20.   
  21. stop() {  
  22.         # Stop daemons.  
  23.         echo -n $"Stoping tomcat service: "  
  24.         $SHUTDOWN  
  25.  RETVAL=$?  
  26.         return $RETVAL  
  27. }  
  28.   
  29. # See how we were called.  
  30. case "$1" in  
  31.   start)  
  32.         start  
  33.         ;;  
  34.   stop)  
  35.         stop  
  36.         ;;  
  37.   restart|reload)  
  38.         stop  
  39.         start  
  40.         RETVAL=$?  
  41.         ;;  
  42.   status)  
  43.         status $prog  
  44.         RETVAL=$?  
  45.         ;;  
  46.   *)  
  47.         echo $"Usage: $0 {start|stop|restart|status}"  
  48.         exit 1  
  49. esac  
  50.   
  51. exit $RETVAL  
 

添加服务:chkconfig --add tomcat

设置自动启动:chkconfig tomcat on

另外,需要修改tomcat/bin/startup.sh,在#!/bin/sh下面添加:CATALINA_OPTS='-Xms2048m -Xmx2048m'

 

 

4. Tomcat全局filter解决乱码问题:

代码就不写了,说下过程,filter代码网上到处都是,我要说的在tomcat/conf/web.xml中增加filter配置,和在单独应用中增加一样,然后把filter的class打包jar文件放在tomcat/lib目录下即可。