在 Debian 上运行 JSP(通常是 Tomcat / Jetty 等 Java Web 容器)变慢,可能由系统、JVM、Web 容器、应用代码、数据库等多方面原因导致。下面按「排查 → 优化」的思路给你一套实用方案。
在盲目优化前,先定位瓶颈:
页面本身慢,还是所有请求都慢?
看 CPU、内存、IO
top
htop
free -m
df -h
iostat -x 1
ps -ef | grep java
jps
编辑 /etc/sysctl.conf:
net.core.somaxconn = 4096
net.ipv4.tcp_tw_reuse = 1
vm.swappiness = 10
sysctl -p
systemctl list-unit-files --type=service | grep enabled
关闭无关服务(如 postfix、cups 等)
JSP 编译、日志写入对 IO 敏感
java -server
JAVA_OPTS="-Xms2g -Xmx2g -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m"
Tomcat 示例:
# /etc/default/tomcat9 或 setenv.sh
JAVA_OPTS="-server -Xms2g -Xmx2g -XX:+UseG1GC"
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
jstat -gcutil <pid> 1000
如果 FGCT 增长快 → 内存不够或内存泄漏
避免首次访问慢:
jspc 预编译 JSPweb.xml 中关闭开发模式<init-param>
<param-name>development</param-name>
<param-value>false</param-value>
</init-param>
server.xml:
<Connector
port="8080"
protocol="org.apache.coyote.http11.Http11Nio2Protocol"
maxThreads="200"
minSpareThreads="20"
acceptCount="100"
enableLookups="false"
compression="on"
/>
<!-- 注释掉 AccessLogValve -->
❌ 错误示例:
<%
// 查数据库、循环计算
%>
✅ 正确做法:
EXPLAIN SELECT ...
<session-config>
<session-timeout>30</session-timeout>
</session-config>
proxy_cache my_cache;
jstack <pid>:看线程卡在哪jmap -histo <pid>:看对象占用✅ 实际案例中高频原因:
Http11Protocol 而不是 NIO如果你愿意,可以告诉我:
我可以直接给你一套针对性配置。