tomcat调优实践
持续整理中
调优思路
清空webapps
隐藏tomcat版本号
开启apr
修改随机数生成器
修改8005重启命令
禁用8009
Connector和exec优化
开机启动
systemd支持
cron自动重启自动清理日志
关闭autoDeploy
使用LD_LIBRARY_PATH替换java.library.path
关闭autoDeploy
1 | <Host name="localhost" appBase="webapps" |
使用LD_LIBRARY_PATH替换java.library.path
1 | JAVA_OPTS="$JAVA_OPTS -Djava.library.path=$CATALINA_HOME/extra/lib |
- 添加多个值
-Djava.library.path=/opt/hdf-java/build/bin:/opt/opencv-2.4.10/build/lib
隐藏版本
1 | cd apache-tomcat/lib/ |
自定义header Server
conf/server.xml
1 | <Connector port="8080" protocol="HTTP/1.1" |
开启apr
LD_LIBRARY_PATH是Linux环境变量名,该环境变量主要用于指定查找共享库(动态链接库)时除了默认路径之外的其他路径。
LD_RUN_PATH环境变量, 它也是把路径编译进可执行文件内,不同的是它只设置RPATH
这么多搜索路径,他们有个先后顺序如下
1、RUMPATH 优先级最高
2、RPATH 其次
3、LD_LIBRARY_PATH
4、/etc/ld.so.cache
5、/usr/lib/ /lib/
1 | yum -y install apr-devel |
bin/catalina.sh stop 不生效问题
在读取时,/dev/random设备会返回小于熵池噪声总数的随机字节。
/dev/random可生成高随机性的公钥或一次性密码本。若熵池空了,对/dev/random的读操作将会被阻塞,直到收集到了足够的环境噪声为止。\这样的设计使得/dev/random是真正的随机数发生器,提供了最大可能的随机数据熵,建议在需要生成高强度的密钥时使用。
/dev/random的一个副本是/dev/urandom(“unblocked”,非阻塞的随机数发生器),它会重复使用熵池中的数据以产生伪随机数据。
这表示对/dev/urandom的读取操作不会产生阻塞,但其输出的熵可能小于/dev/random的。它可以作为生成较低强度密码的伪随机数生成器,不建议用于生成高强度长期密码。
1 | sed -i 's/securerandom.source=file:\/dev\/random/securerandom.source=file:\/dev\/urandom/g' /usr/java/jdk1.8.0_192/jre/lib/security/java.security |
使bin/catalina.sh stop -force生效
cat >> /data/webserver/tomcat/bin/setenv.sh << EOF
#!/bin/bash
CATALINA_PID=$CATALINA_HOME/bin/catalina.map.pid
EOF
Connector优化
1 | <Connector port="8080" protocol="HTTP/1.1" |
prometheus监控jmx
https://repo1.maven.org/maven2/io/prometheus/jmx/collector/0.12.0/collector-0.12.0.jar
https://github.com/prometheus/jmx_exporter/tree/master/example_configs
1 |
|
cat setenv.sh
1
2
3
4
5
6
7#!/bin/bash
CATALINA_PID=$CATALINA_HOME/bin/catalina.map.pid
JAVA_OPTS="$JAVA_OPTS -Djava.library.path=$CATALINA_HOME/extra/apr/lib
-Djava.security.egd=file:/dev/./urandom
-Djava.awt.headless=true"
[ -f $CATALINA_HOME/extra/catalina_opts.sh ] && source $CATALINA_HOME/extra/catalina_opts.sh
[ -f $CATALINA_HOME/extra/jmx_exporter_opts.sh ] && source $CATALINA_HOME/extra/jmx_exporter_opts.shcat jmx_exporter_opts.sh
1
JAVA_OPTS="$JAVA_OPTS -javaagent:/data/webserver/tomcat/extra/jmx_exporter/jmx_prometheus_javaagent-0.12.0.jar=7788:/data/webserver/tomcat/extra/jmx_exporter/tomcat.yml"
解决验证码不显示的问题
- Headless模式是一种系统配置模式。在该模式下,系统缺少了显示设备、键盘或鼠标,一般Linux服务端使用headless mode。
1
2
3JAVA_OPTS="$JAVA_OPTS -Djava.awt.headless=true"
或
System.setProperty("java.awt.headless", "true");