在 Debian 上运行 JSP(Java Server Pages) 应用(通常基于 Tomcat / Jetty / WildFly 等 Java Web 容器),性能优化可以从 系统层、JVM层、Web容器层、JSP/代码层、数据库层 多个维度来做。下面按实战角度总结。
JSP 应用并发高时容易遇到文件描述符不足。
# 查看
ulimit -n
# 修改(/etc/security/limits.conf)
* soft nofile 65535
* hard nofile 65535
net.core.somaxconn = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
sysctl -p
JSP 编译、日志、临时目录尽量在高速磁盘:
/var/lib/tomcat9
/var/log/tomcat9
/tmp
JSP 本质是 Java,JVM 调优影响最大。
编辑:
/etc/default/tomcat9
或
CATALINA_OPTS="-Xms2g -Xmx2g -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m"
建议:
Parallel 或 G1-XX:+UseG1GC
# 或
-XX:+UseZGC
-Dcom.sun.management.jmxremote
server.xml 示例(NIO + 线程池):
<Connector port="8080"
protocol="org.apache.coyote.http11.Http11Nio2Protocol"
maxThreads="500"
minSpareThreads="50"
acceptCount="1000"
connectionTimeout="20000"
enableLookups="false"
compression="on" />
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<trim-directive-whitespaces>true</trim-directive-whitespaces>
</jsp-property-group>
</jsp-config>
生产环境:
<Context reloadable="false" />
避免首次访问慢:
jspc 预编译 JSP 为 Servlet❌ 不推荐:
<%
// 大量业务逻辑
%>
✅ 推荐:
代替脚本片段,性能更好、可维护性高。
location ~* \.(jpg|css|js|png)$ {
expires 30d;
}
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
}
好处:
maximumPoolSize=50
minimumIdle=10
top / htopjstack(线程阻塞)jstat -gc如果你愿意,可以告诉我:
我可以给你一套 可直接用的配置示例。