如何确保Debian系统上JSP应用稳定运行,让我无忧享受高效服务?
- 内容介绍
- 文章标签
- 相关推荐
说到程序基础运维。建立可靠的运行环境
痛点:程序长期不更新导致已知安全漏洞频发,服务器意外宕机让业务中断。
-
定期执行
apt update && apt upgrade -y确保内核和所有软件包保持最新。 - 启用自动安全更新,降低人工疏漏风险。
-
使用
apt-listchanges关注重大变更,提前做好兼容性测试。 - 配置防火墙。只开放业务必需端口,拒绝一切未知流量。
Java 与 Tomcat 环境的正确安装
痛点:Java 版本不匹配或环境变量错误导致应用启动失败、日志里满是 “ClassNotFound”。
-
安装 OpenJDK:
apt install -y openjdk-11-jdk -
说到设置全局变量。
echo "JA_HOME=/usr/lib/jvm/java-11-openjdk-amd64">> /etc/environment source /etc/environment -
下载并解压 Tomcat:
wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.85/bin/apache-tomcat-9.0.85.tar.gz -P /opt tar -xzf /opt/apache-tomcat-9.0.85.tar.gz -C /opt ln -s /opt/apache-tomcat-9.0.85 /opt/tomcat
Tomcat 参数调优
-
Edit
/opt/tomcat/conf/server.xml,locate `` element and set: - 根据实际访问量逐步调整,避免“maxThreads 达到上限导致请求排队”。
应用部署常用方法:分离代码与容器
痛点:直接把 WAR 包放在 Tomcat webapps 目录。升级时难以回滚,出现“文件被锁定”导致服务不可用。
-
创建专属目录存放业务代码,例如
/srv/jsp-apps/yourapp。 -
使用 symbolic link 将该目录挂载到 Tomcat 的 `
` 中: - 每次发布新版本。只需替换目录内容并执行一次软链接切换,就可以零停机回滚。
使用 systemd 管理 Tomcat 服务。实现自愈能力
痛点:TOMCAT 意外退出后没有自动重启,导致业务长时间不可访问。
Description=Apache Tomcat 9 Servlet Container After=network.target Type=forking User=tomcat Group=tomcat Environment=JA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid Environment=CATALINA_HOME=/opt/tomcat Environment=CATALINA_BASE=/opt/tomcat ExecStart=/opt/tomcat/bin/startup.sh ExecStop=/opt/tomcat/bin/shutdown.sh Restart=always RestartSec=10 WantedBy=multi-user.target
-
保存为
/etc/systemd/system/tomcat.service -
- `Restart=always` 确保异常退出后自动恢复,`RestartSec` 防止快速循环重启。
权限与文件程序安全设置
痛点:TOMCAT 使用者权限过宽,被恶意脚本利用获取程序根权限。
-
Create dedicated user and group:
groupadd tomcat useradd -s /bin/false -g tomcat -d /opt/tomcat tomcat -
Avoid world‑readable/writeable files:
chmod -R o-rwx /opt/tomcat/conf /opt/tomcat/logs /opt/tomapp/webapps -
使用 ufw 限制端口:
# 开放 HTTP/HTTPS sudo ufw allow 80/tcp sudo ufw allow 443/tcp # 如需外部访问 TomTom 的管理界面可限制来源 IP sudo ufw allow from 203.0.113.10 to any port 8080 proto tcp sudo ufw enable
-
为 Nginx 前置代理安装 Let’s Encrypt 证书:
# 安装 Certbot sudo apt install -y certbot python3-certbot-nginx # 获取证书并自动配置 Nginx sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com # 自动续期 sudo systemctl status certbot.timer
-
在 Nginx 中做反向代理,将 HTTPS 请求转发至内部 TomCat:
# 示例 Nginx 配置片段 server { listen 443 ssl;server_name yourdomain.com www.yourdomain.com;ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host;proxy_set_header X‑Real‑IP $remote_addr;不过,proxy_set_header X‑Forwarded‑For $proxy_add_x_forwarded_for;proxy_set_header X‑Forwarded‑Proto $scheme;} } -
统一日志方法这方面,在 server.xml 中开启 AccessLogValve:
- 实时查看关键日志:
tail -f /var/log/tomcats9/catalina.out # 启动 & 错误信息 tail -f /var/log/tomcats9/localhost_access_log.* # HTTP 请求统计 grep ERROR /var/log/tomcats9/*.log | less # 快速定位异常
- 将日志推送至集中网站:
sudo apt install filebeat sudo cp /usr/share/filebeat/filebeat.yml /etc/filebeat/filebeat.yml # 在 filebeat.yml 中添加: filebeat.inputs: - type: log enabled: true 说到paths。- "/var/log/tomcats9/*.log" output.elasticsearch: hosts这方面,
运行 `systemctl enable --now filebeat`。
再看性能监控。预防瓶颈而不是事后抢救
Pain point : CPU、内存突增时没有报警,导致页面卡死、使用者流失。不过,
-
安装 Promeus Node Exporter 与 JMX Exporter:
# Node Exporter wget https://github.com/promeus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz tar xzf node_exporter-*.tar.gz && mv node_exporter-*/node_exporter /usr/local/bin/ systemctl create --name node-exporter.service ... # JMX Exporter wget https://repo1.maven.org/maven2/io/promeus/jmx/jmx_promeus_javaagent/0.20.0/jmx_promeus_javaagent-0.20.0.jar \ -O /opt/tomc at/lib/jmx_promeus_javaagent.jar echo 'JA_OPTS="$JA_OPTS -javaagent:/opt/tomac t/lib/jmx_promeus_javaagent.jar=9090:/path/to/config.yaml"'>> \ /opt/T omc at/bin/setenv.sh
-
Grafana 仪表盘推荐:
- Catalina Thread Count – 实时监控 maxThreads 使用率。
- Total Requests per Second – 检测突发流量。
- 从阈值报警示例来看,
再看groups,- name: tomc at-alerts 从rules来看,- alert: HighThreadUsage 说到expr,tomc atthreadsactive{job="tomc at"}>/ job:maxThreads * .8 for的观点是,5m 从labels来看。severity: critical annotations: summary: "TomCat active threads exceed 80% of maxThreads" description: "{{ $labels.instance }} has {{ $value }} active threads."备份与灾难恢复:数据永不丢失
Pain point : 硬盘故障或误操作造成代码、配置甚至数据库一次性全毁。
- 每日增量备份应用目录和配置文件:
DATE=$ BACKUPDIR="/backup/${DATE}" mkdir -p "$BACKUPDIR"
tar czf "$BACKUPDIR/app.tar.gz" /srv/jsp-apps/ tar czf "$BACKUPDIR/conf.tar.gz" /opt/T omc at/conf/ mysqldump -u root -pYourPass yourdb | gzip> "$BACKUP_DIR/db.sql.gz"
find /backup/* -mtime +30 -exec rm -rf {} \;
crontab –e →
30 2 * * * /usr/local/bin/daily_backup.sh- 快照式恢复这方面。
-
至于LVM,
lvcreate –L10G –n snap_tomac t vg_main→lvremove…,其实, -
ZFS这方面。
zfs snapshot tank/tomac@$→zfs rollback…,老实说,
- 实时查看关键日志:
- 使用 HAProxy 或 Nginx 做四层负载均衡:
- 会话粘滞如果业务依赖 HttpSession:
- 高可用 IP+ VRRP 实现无缝切换。
-
...
chown -R tomcat:tomcat /opt/tomcat防火墙与 SSL/TLS 加密——保护网络流量安全
Pain point: 未加密的 HTTP 通道被抓包、恶意 IP 暴力访问端口导致 DDoS 警报。
至于日志监控。第一时间捕获异常
Pain point : 日志散落在多个文件夹,运维人员需要手动 grep 才能定位错误,导致故障排查耗时。
负载均衡与高可用方案
Pain point : 单台服务器流量高峰时崩溃。没有备用节点,
conf frontend httpin bind *:80 defaultbackend tomcats
backend tomcats balance roundrobin server tom1 10.0.1.101:8080 check fall 3 rise 2 inter 5000 server tom2 10 .0 .1 .102 :8080 check fall3 rise2 inter5000
conf
backend tomcats
stick-table type ip size100k expire10m
stick on src
conf
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
auntication { auth_type PASS;auth_pass secret }
virtual_ipaddress {192 .168 .1 .100 } }
从测试验证来看。上线前必须通过的关卡
缺乏完整测试,上线后才发现性能瓶颈和功能缺陷,需要紧急回滚。
说到程序基础运维。建立可靠的运行环境
痛点:程序长期不更新导致已知安全漏洞频发,服务器意外宕机让业务中断。
-
定期执行
apt update && apt upgrade -y确保内核和所有软件包保持最新。 - 启用自动安全更新,降低人工疏漏风险。
-
使用
apt-listchanges关注重大变更,提前做好兼容性测试。 - 配置防火墙。只开放业务必需端口,拒绝一切未知流量。
Java 与 Tomcat 环境的正确安装
痛点:Java 版本不匹配或环境变量错误导致应用启动失败、日志里满是 “ClassNotFound”。
-
安装 OpenJDK:
apt install -y openjdk-11-jdk -
说到设置全局变量。
echo "JA_HOME=/usr/lib/jvm/java-11-openjdk-amd64">> /etc/environment source /etc/environment -
下载并解压 Tomcat:
wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.85/bin/apache-tomcat-9.0.85.tar.gz -P /opt tar -xzf /opt/apache-tomcat-9.0.85.tar.gz -C /opt ln -s /opt/apache-tomcat-9.0.85 /opt/tomcat
Tomcat 参数调优
-
Edit
/opt/tomcat/conf/server.xml,locate `` element and set: - 根据实际访问量逐步调整,避免“maxThreads 达到上限导致请求排队”。
应用部署常用方法:分离代码与容器
痛点:直接把 WAR 包放在 Tomcat webapps 目录。升级时难以回滚,出现“文件被锁定”导致服务不可用。
-
创建专属目录存放业务代码,例如
/srv/jsp-apps/yourapp。 -
使用 symbolic link 将该目录挂载到 Tomcat 的 `
` 中: - 每次发布新版本。只需替换目录内容并执行一次软链接切换,就可以零停机回滚。
使用 systemd 管理 Tomcat 服务。实现自愈能力
痛点:TOMCAT 意外退出后没有自动重启,导致业务长时间不可访问。
Description=Apache Tomcat 9 Servlet Container After=network.target Type=forking User=tomcat Group=tomcat Environment=JA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid Environment=CATALINA_HOME=/opt/tomcat Environment=CATALINA_BASE=/opt/tomcat ExecStart=/opt/tomcat/bin/startup.sh ExecStop=/opt/tomcat/bin/shutdown.sh Restart=always RestartSec=10 WantedBy=multi-user.target
-
保存为
/etc/systemd/system/tomcat.service -
- `Restart=always` 确保异常退出后自动恢复,`RestartSec` 防止快速循环重启。
权限与文件程序安全设置
痛点:TOMCAT 使用者权限过宽,被恶意脚本利用获取程序根权限。
-
Create dedicated user and group:
groupadd tomcat useradd -s /bin/false -g tomcat -d /opt/tomcat tomcat -
Avoid world‑readable/writeable files:
chmod -R o-rwx /opt/tomcat/conf /opt/tomcat/logs /opt/tomapp/webapps -
使用 ufw 限制端口:
# 开放 HTTP/HTTPS sudo ufw allow 80/tcp sudo ufw allow 443/tcp # 如需外部访问 TomTom 的管理界面可限制来源 IP sudo ufw allow from 203.0.113.10 to any port 8080 proto tcp sudo ufw enable
-
为 Nginx 前置代理安装 Let’s Encrypt 证书:
# 安装 Certbot sudo apt install -y certbot python3-certbot-nginx # 获取证书并自动配置 Nginx sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com # 自动续期 sudo systemctl status certbot.timer
-
在 Nginx 中做反向代理,将 HTTPS 请求转发至内部 TomCat:
# 示例 Nginx 配置片段 server { listen 443 ssl;server_name yourdomain.com www.yourdomain.com;ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host;proxy_set_header X‑Real‑IP $remote_addr;不过,proxy_set_header X‑Forwarded‑For $proxy_add_x_forwarded_for;proxy_set_header X‑Forwarded‑Proto $scheme;} } -
统一日志方法这方面,在 server.xml 中开启 AccessLogValve:
- 实时查看关键日志:
tail -f /var/log/tomcats9/catalina.out # 启动 & 错误信息 tail -f /var/log/tomcats9/localhost_access_log.* # HTTP 请求统计 grep ERROR /var/log/tomcats9/*.log | less # 快速定位异常
- 将日志推送至集中网站:
sudo apt install filebeat sudo cp /usr/share/filebeat/filebeat.yml /etc/filebeat/filebeat.yml # 在 filebeat.yml 中添加: filebeat.inputs: - type: log enabled: true 说到paths。- "/var/log/tomcats9/*.log" output.elasticsearch: hosts这方面,
运行 `systemctl enable --now filebeat`。
再看性能监控。预防瓶颈而不是事后抢救
Pain point : CPU、内存突增时没有报警,导致页面卡死、使用者流失。不过,
-
安装 Promeus Node Exporter 与 JMX Exporter:
# Node Exporter wget https://github.com/promeus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz tar xzf node_exporter-*.tar.gz && mv node_exporter-*/node_exporter /usr/local/bin/ systemctl create --name node-exporter.service ... # JMX Exporter wget https://repo1.maven.org/maven2/io/promeus/jmx/jmx_promeus_javaagent/0.20.0/jmx_promeus_javaagent-0.20.0.jar \ -O /opt/tomc at/lib/jmx_promeus_javaagent.jar echo 'JA_OPTS="$JA_OPTS -javaagent:/opt/tomac t/lib/jmx_promeus_javaagent.jar=9090:/path/to/config.yaml"'>> \ /opt/T omc at/bin/setenv.sh
-
Grafana 仪表盘推荐:
- Catalina Thread Count – 实时监控 maxThreads 使用率。
- Total Requests per Second – 检测突发流量。
- 从阈值报警示例来看,
再看groups,- name: tomc at-alerts 从rules来看,- alert: HighThreadUsage 说到expr,tomc atthreadsactive{job="tomc at"}>/ job:maxThreads * .8 for的观点是,5m 从labels来看。severity: critical annotations: summary: "TomCat active threads exceed 80% of maxThreads" description: "{{ $labels.instance }} has {{ $value }} active threads."备份与灾难恢复:数据永不丢失
Pain point : 硬盘故障或误操作造成代码、配置甚至数据库一次性全毁。
- 每日增量备份应用目录和配置文件:
DATE=$ BACKUPDIR="/backup/${DATE}" mkdir -p "$BACKUPDIR"
tar czf "$BACKUPDIR/app.tar.gz" /srv/jsp-apps/ tar czf "$BACKUPDIR/conf.tar.gz" /opt/T omc at/conf/ mysqldump -u root -pYourPass yourdb | gzip> "$BACKUP_DIR/db.sql.gz"
find /backup/* -mtime +30 -exec rm -rf {} \;
crontab –e →
30 2 * * * /usr/local/bin/daily_backup.sh- 快照式恢复这方面。
-
至于LVM,
lvcreate –L10G –n snap_tomac t vg_main→lvremove…,其实, -
ZFS这方面。
zfs snapshot tank/tomac@$→zfs rollback…,老实说,
- 实时查看关键日志:
- 使用 HAProxy 或 Nginx 做四层负载均衡:
- 会话粘滞如果业务依赖 HttpSession:
- 高可用 IP+ VRRP 实现无缝切换。
-
...
chown -R tomcat:tomcat /opt/tomcat防火墙与 SSL/TLS 加密——保护网络流量安全
Pain point: 未加密的 HTTP 通道被抓包、恶意 IP 暴力访问端口导致 DDoS 警报。
至于日志监控。第一时间捕获异常
Pain point : 日志散落在多个文件夹,运维人员需要手动 grep 才能定位错误,导致故障排查耗时。
负载均衡与高可用方案
Pain point : 单台服务器流量高峰时崩溃。没有备用节点,
conf frontend httpin bind *:80 defaultbackend tomcats
backend tomcats balance roundrobin server tom1 10.0.1.101:8080 check fall 3 rise 2 inter 5000 server tom2 10 .0 .1 .102 :8080 check fall3 rise2 inter5000
conf
backend tomcats
stick-table type ip size100k expire10m
stick on src
conf
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
auntication { auth_type PASS;auth_pass secret }
virtual_ipaddress {192 .168 .1 .100 } }
从测试验证来看。上线前必须通过的关卡
缺乏完整测试,上线后才发现性能瓶颈和功能缺陷,需要紧急回滚。

