Java Web应用在Ubuntu上如何调试
在 Ubuntu 上调试 Ja va Web 应用的标准流程

免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈
调试Ja va Web应用,尤其是在生产或准生产环境中,是开发者必须掌握的技能。下面这份流程,涵盖了从本地开发到远程诊断的完整路径,帮你系统化地解决问题。
一 本地开发调试 Tomcat 或嵌入式容器
一切从本地开始。在Ubuntu桌面环境下搭建一个可调试的开发环境,是最高效的起点。
- 安装环境:首先,安装指定版本的JDK(8、11或17)和Tomcat 9(或其他对应版本)。开发工具方面,Eclipse IDE for Ja va EE 或 IntelliJ IDEA 任选其一即可。
- IDE配置与部署:在IDE中配置Server Runtime,将其指向Tomcat的安装目录。接着,创建一个Dynamic Web Project,并将你的应用部署到这台本地服务器上。
- 启动调试会话:接下来,在关键的JSP页面、Servlet或业务逻辑代码中设置断点。通过“Debug As → Debug on Server”启动调试,然后在浏览器中访问对应页面来触发断点。一旦命中,你就可以自如地进行单步跟踪、观察变量和计算表达式了。
- 查看运行日志与问题定位:别忘了日志这个好帮手。Tomcat的日志通常位于
/var/log/tomcat9/catalina.out。将断点调试信息与日志中的错误记录结合起来分析,往往能更快地锁定问题根源。
二 远程调试 Tomcat 或任意 Ja va Web 服务
当问题出现在远程服务器上时,远程调试就成了“救火队长”。其核心是让JVM开启调试端口,允许IDE通过网络连接进来。
- 在 Ubuntu 服务器上启用调试参数
- 方式一(推荐,不改动启动脚本):在Tomcat的环境变量
CATALINA_OPTS中设置。例如,在/usr/share/tomcat9/bin/catalina.sh文件中,找一个合适的位置(通常放在其他JA VA_OPTS设置之后更稳妥)添加:
这里有几个关键点:CATALINA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005"address端口可以自定义,比如5005。强烈建议写成address=*:5005来监听所有网络接口,避免只绑定127.0.0.1导致外部无法连接。suspend=n表示应用启动时不等待调试器连接;如果需要调试启动过程,可以改为suspend=y,让JVM启动后暂停,直到调试器接入。
- 方式二(传统参数,兼容旧版本):
CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005" - 重启 Tomcat 生效:
sudo systemctl restart tomcat9
- 方式一(推荐,不改动启动脚本):在Tomcat的环境变量
- 在 IDE 中创建远程调试配置
- IntelliJ IDEA:打开“Run/Debug Configurations”,添加一个“Remote JVM Debug”。填写服务器IP地址和端口(如5005),选择对应的源码模块,然后点击Debug按钮即可连接。
- Eclipse:在“Debug Configurations”中创建“Remote Ja va Application”配置。同样填入Host(服务器IP)和Port(5005),并关联本地项目源码,随后启动Debug。
- 连接与验证
- 连接前,可以在服务器上确认调试端口是否已成功监听:
ss -lntp | grep 5005 - 当本地IDE成功连接并命中断点后,你会发现,其调试体验——查看变量、调用堆栈、计算表达式——与本地调试几乎毫无二致。
- 连接前,可以在服务器上确认调试端口是否已成功监听:
三 命令行与进阶工具
并非所有环境都允许使用图形化IDE。掌握命令行工具和系统级诊断方法,能让你在更复杂的情况下游刃有余。
- 使用 JDB 进行命令行调试(无需图形界面):对于无GUI的服务器或喜欢命令行的开发者,JDB是标准选择。
# 连接远程调试端口 jdb -attach <服务器IP>:5005 # 常用命令示例 stop in com.example.MyServlet.doGet # 在方法处设置断点 cont # 继续执行 step # 单步步入 next # 单步步过 print myVariable # 打印变量值 - 进阶排查工具(定位系统层面或本地开发环境问题):有些问题超出了Ja va层面,需要更底层的工具。
- strace:跟踪进程的系统调用,非常适合分析应用启动失败、类加载异常、或文件/网络访问等底层问题。
- GDB:主要用于调试JVM本身或应用调用的本地原生(Native)库。对于纯Ja va应用,优先使用JDWP/JDB或IDE。
- Valgrind:强大的内存错误检测工具,多用于C/C++等原生代码。Ja va应用的内存问题,通常优先依靠GC日志和堆转储(Heap Dump)分析。
四 常见问题与排查清单
调试过程不会总是一帆风顺。遇到连接失败或断点不生效时,可以按照下面这个清单逐一核对。
- 端口与防火墙
- 确认服务器的8080(应用端口)和5005(调试端口)既没有被其他进程占用,也未被防火墙阻拦:
sudo ufw allow 8080,5005/tcp ss -lntp | egrep ':(8080|5005)'
- 确认服务器的8080(应用端口)和5005(调试端口)既没有被其他进程占用,也未被防火墙阻拦:
- 监听地址
- 这是远程连接失败的常见原因。务必确保调试参数中的地址设置为
address=*:5005或address=0.0.0.0:5005,如果只绑定了127.0.0.1,外部机器自然无法连接。
- 这是远程连接失败的常见原因。务必确保调试参数中的地址设置为
- 版本与兼容性
- 检查JDK版本与Tomcat版本是否兼容。另外,调试JSP时,需要确保容器正确部署了JSP文件,且与源码匹配。
- 日志优先
- 如果断点始终无法命中,别急着怀疑调试配置。首先去查看
catalina.out和localhost.<日期>.log等日志文件,确认应用本身是否已成功部署且没有抛出任何启动异常。
- 如果断点始终无法命中,别急着怀疑调试配置。首先去查看
- 远程代码一致性
- 这是最关键的陷阱之一:远程服务器上运行的class文件,必须与本地IDE中打开的源代码版本完全一致(来自同一次构建)。否则,断点位置会错乱,导致调试行为异常或完全失效。
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
Debian环境下Node.js日志清理技巧有哪些
Debian服务器Node js日志管理与轮转最佳实践指南 高效的日志管理是保障Node js应用稳定运行与快速排障的关键环节。在Debian服务器环境中,随着应用持续运行,日志文件会不断累积,若不加以妥善管理,极易导致磁盘空间耗尽,进而引发服务中断。本文将深入解析几种在Debian系统上管理Nod
Debian JS日志如何自动化处理
Debian JS日志自动化处理方案 处理服务器日志,尤其是Node js应用产生的日志,如果全靠手动,那简直就是运维人员的噩梦。文件无限增长、问题难以追溯、磁盘空间告急……这些问题,其实一套清晰的自动化方案就能搞定。下面就来聊聊如何在Debian系统上,为你的JS应用搭建一个从生成、轮转、采集到分
Debian JS日志如何审计
Debian JS日志审计实操指南 一 审计目标与总体架构 要搭建一套有效的日志审计体系,首先得把目标和框架理清楚。这事儿其实不复杂,核心就三件事:明确范围、打通链路、保障安全。 明确审计范围:一个完整的JS应用生态,日志来源是分散的。前端浏览器的JS异常、后端的Node js服务日志、承载服务的W
Debian JS日志如何分析性能瓶颈
Debian 环境下用 JS 日志定位性能瓶颈的实操指南 性能问题就像系统里的“暗伤”,平时不易察觉,一旦爆发却足以让应用瘫痪。好在,高质量的日志就是最好的“诊断报告”。今天,我们就来聊聊在 Debian 环境中,如何从海量 JS 日志里,精准揪出那些拖慢系统的“元凶”。 一 准备可度量的日志 定位
Debian JS日志如何监控
Debian 上监控 Ja vaScript 日志的实用方案 一 场景与总体架构 聊到Ja vaScript日志监控,首先得把场景分清楚。前端和后端,完全是两码事。 前端 JS(浏览器)这块,核心是捕捉运行时的错误和用户行为。通常的做法是接入像 Sentry 这类专业的前端异常监控服务。当然,开发阶
- 日榜
- 周榜
- 月榜
1
2
3
4
5
6
7
8
9
10
相关攻略
2015-03-10 11:25
2015-03-10 11:05
2021-08-04 13:30
2015-03-10 11:22
2015-03-10 12:39
2022-05-16 18:57
2025-05-23 13:43
2025-05-23 14:01
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程
热门话题

