在 Debian 下运行 JSP(通常是 Tomcat / Jetty 等 Java Web 容器)出现访问慢、响应慢,可以从系统、JVM、Tomcat、应用、数据库几个层面来排查和优化。下面按“先定位 → 再优化”的思路给你一套实用方案。
time curl http://localhost:8080/your.jsp
很多 Debian 默认启用 IPv6,Tomcat 解析慢:
# 编辑
sudo nano /etc/sysctl.conf
添加:
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
sudo sysctl -p
ulimit -n 65535
永久:
sudo nano /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
iostat -x 1
如果 %util 很高,说明磁盘 IO 是瓶颈。
JSP 默认第一次访问才编译成 Servlet,会非常慢。
方法一:提前访问
for i in $(cat urls.txt); do
curl -s $i > /dev/null
done
方法二:使用 JspC 预编译(推荐生产环境)
编辑:
sudo nano /etc/tomcat9/server.xml
(路径可能是 /opt/tomcat/conf/server.xml)
<Connector port="8080"
maxThreads="200"
minSpareThreads="20"
acceptCount="100"
connectionTimeout="20000" />
sudo nano /etc/default/tomcat9
或 setenv.sh:
JAVA_OPTS="-Xms512m -Xmx2048m -XX:+UseG1GC"
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
jstat -gcutil <pid> 1000
如果频繁 Full GC,说明内存不够或内存泄漏。
SHOW PROCESSLIST;
或开启慢查询日志。
例如:
maximumPoolSize=20
connectionTimeout=30000
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=jsp:10m;
server_name_in_redirect off;
| 问题 | 解决 |
|---|---|
| localhost 解析慢 | /etc/hosts 加 127.0.0.1 hostname |
| systemd 限制内存 | systemctl edit tomcat9 |
| 使用 OpenJDK 过旧 | 升级到 JDK 11/17 |
| 日志同步写 | 改为异步 logging |
如果你愿意,可以把下面信息发我,我可以精准给你配置:
我可以直接帮你写 server.xml / JVM 参数 / 优化脚本。