zoukankan      html  css  js  c++  java
  • 记一次服务器Tomcat优化经历

    公司需要一台测试服务器来做测试用,所以花了几天时间把服务全部部署好,在部署好war包之后,发现Tomcat访问慢。

    1、进入Tomcat的bin目录下,运行

    ./catalina.sh run命令,在前台打印运行信息,首先看其有没有报错。好,没有报错,进行下一步。

    1)修改你的jdk目录下/jre/lib/security目录下的java.security这个文件,将securerandom.source=file:/dev/random改成securerandom.source=file:/dev/./urandom,这是Java官方给的解决方案,修改随机数。

    2)修改Tomcat目录下conf目录下server.xml文件配置:

    <Connector port="8080" protocol="HTTP/1.1"
    connectionTimeout="40000"
    redirectPort="8443" URIEncoding="UTF-8"
    acceptCount="4000" maxThreads="5000"
    compression="on" compressionMinSize="2048"
    compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
    disableUploadTimeout="true" debug="0"
    maxHttpHeaderSize="8192" useBodyEncodingForURI="true" minProcessors="100" maxProcessors="5000"
    minSpareThreads="1000" maxSpareThreads="4000" enableLookups="false"/>

    2、top查看线程,看看java有没有特别高的占用,有的话,用jstack pid追踪查看是哪的语句造成的。

    3、设置JVM运行大小,及配置优化参数,在Tomcat目录bin目录下vim catalina.sh

    在# OS specific support.  $var _must_ be set to either true or false.这一行下加入:

    export JAVA_OPTS="-server -Xms1400M -Xmx6144M -Xss1024k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=14 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true "

    4、nginx+Tomcat做动静分离设置,加快网页载入速度,我的nginx配置如下:

    负载均衡配置:

    upstream gw {
    server localhost:8080;
    }

    在http模块里加入:

    proxy_cache_key '$host:$server_port$request_uri';
    proxy_temp_file_write_size 64k;
    proxy_temp_path /dev/shm/cache/proxy_temp_path;
    proxy_cache_path /dev/shm/cache/proxy_cache_path levels=1:2 keys_zone=cache_one:200m inactive=5d max_size=1g;
    proxy_ignore_headers X-Accel-Expires Expires Cache-Control Set-Cookie;

    server配置:

    server {
    listen 80;
    server_name localhost 192.168.1.111:8080;
    access_log /data/wwwlogs/access_nginx.log combined;
    location ~ ^/crossdomain.xml {
    root /usr/local/crossdomain;
    }
    location ~ .*.(js|css|ico|png|jpg|eot|svg|ttf|woff) {
    proxy_cache cache_one;
    proxy_cache_valid 200 304 302 5d;
    proxy_cache_valid any 5d;
    proxy_cache_key '$host:$server_port$request_uri';
    add_header X-Cache '$upstream_cache_status from $host';
    root /usr/local/tomcat/gw/webapps/gw/WEB-INF ;
    expires 10d;
    }
    location ~ .*$ {
    #index index;
    proxy_pass http://gw;
    }
    }

    5、配置Tomcat+mysql连接池,在http://tomcat.apache.org/tomcat-7.0-doc/jndi-datasource-examples-howto.html这个网址里可以看到示例。

    在conf目录下编辑context.xml文件,注释:<WatchedResource>WEB-INF/web.xml</WatchedResource>默认。

    添加:

    <Resource name="jdbc/zhi"
    auth="Container"
    type="javax.sql.DataSource"
    factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
    testWhileIdle="true"
    testOnBorrow="true"
    testOnReturn="false"
    validationQuery="SELECT 1"
    validationInterval="30000"
    timeBetweenEvictionRunsMillis="30000"
    maxActive="1000"
    minIdle="10"
    maxWait="20000"
    initialSize="10"
    removeAbandonedTimeout="60"
    removeAbandoned="true"
    logAbandoned="true"
    minEvictableIdleTimeMillis="30000"
    jmxEnabled="true"
    jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;
    org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer"
    username="root"
    password="用户密码"
    driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://你所要连接数据库的地址"/>

    在WEB-INF目录下编辑web.xml文件,在<web-app>中加入:

    <description>MySQL Test App</description>
    <resource-ref>
    <description>DB Connection</description>
    <res-ref-name>jdbc/zhi</res-ref-name>        #名字要对应
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
    </resource-ref>

    注意要将数据驱动包放在Tomcat的lib目录下,否则会提示找不到数据驱动。

    连接池配置完成。

    6、首先./shutdown.sh,然后运行./catalina.sh run命令,同时在网页打开你要打开的网页,查看输出,可以看到网页调用数据库等信息,计算下连接数据库所需时间,看是否要优化数据库。我就卡在这一步上了,Tomcat是秒速反应,但是在连接数据库时耗费的时间在6S左右。由于数据库在另一台公网服务器上,所以也只能凑合用了。

    tomcat优化有四种:JVM优化,连接池优化,线程优化,内存优化。

    原来打开网页要20多秒,经过优化,测试服务器载入网页速度快了最少13秒以上。

  • 相关阅读:
    jm8.6编解码器概述
    mingw32环境下链接库找不到问题
    ts流中的pcr与pts计算与逆运算
    基于医疗知识图谱的问答系统(二)
    Neo4j图数据库导入数据
    基于医疗知识图谱的问答系统(一)
    知识图谱和neo4j的基本操作
    从.NET转GO了
    Flask开发技巧之参数校验
    如何在PPT中插入Pyecharts的图表?
  • 原文地址:https://www.cnblogs.com/magmell/p/7089062.html
Copyright © 2011-2022 走看看