记一次服务器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配置如下:

扫描二维码关注公众号,回复: 4041847 查看本文章

负载均衡配置:

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命令,同时在网页打开你要打开的网页,查看输出,可以看到网页调用数据库等信息,计算下连接数据库所需时间,看是否要优化数据库。

猜你喜欢

转载自blog.csdn.net/baijiu1/article/details/73849710