在 Ubuntu + JSP(通常是 Tomcat/Java Web) 环境下,优化性能可以从 系统、Tomcat、JSP/代码、数据库、缓存 多个层面入手。下面给你一份实用且可落地的优化清单。
JSP/Tomcat 高并发时会耗尽 fd:
ulimit -n 65535
永久生效:
# /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
编辑 /etc/sysctl.conf:
net.core.somaxconn = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
应用:
sysctl -p
cat /sys/block/sda/queue/scheduler
推荐:mq-deadline 或 none(云服务器)
示例(NIO + 多线程):
<Connector
port="8080"
protocol="org.apache.coyote.http11.Http11Nio2Protocol"
maxThreads="500"
minSpareThreads="50"
acceptCount="1000"
connectionTimeout="20000"
enableLookups="false"
compression="on"
/>
⚠️ enableLookups=false 可避免 DNS 反向解析
修改 bin/catalina.sh 或 setenv.sh:
JAVA_OPTS="-Xms2g -Xmx2g -XX:+UseG1GC -XX:MaxGCPauseMillis=200"
建议:
webapps 下的:
docsexamplesmanager(如不用)避免第一次访问慢:
<servlet>
<servlet-name>jsp</servlet-name>
<init-param>
<param-name>development</param-name>
<param-value>false</param-value>
</init-param>
</servlet>
或在 conf/web.xml 中:
<param-name>jspPrecompile</param-name>
<param-value>true</param-value>
✅ 使用:
❌ 避免:
<%
// 大量 Java 逻辑
%>
<%@ page cache="true" %>
<%@ page buffer="8kb" autoFlush="true" %>
如:HikariCP / DBCP2
maximumPoolSize=20
Nginx 示例:
location ~ \.(js|css|png)$ {
root /var/www/static;
expires 30d;
}
SELECT *SHOW VARIABLES LIKE 'slow_query%';
top / htopjstackjvisualvmab / wrk压测示例:
ab -n 10000 -c 200 http://localhost:8080/index.jsp
| 现象 | 原因 |
|---|---|
| 首访问慢 | JSP 未预编译 |
| CPU 高 | GC 频繁 / 死循环 |
| 内存涨 | 连接未释放 |
| 响应慢 | 数据库无索引 |
如果你愿意,可以告诉我:
我可以直接给你一套针对性配置方案。