Java 我们如何调试生产Struts/Hibernate应用程序?
因此,我们使用Netbeans 6.9.1,将代码推送到SVN服务器(dev)上,并在dev机器上运行连接到MySQL的本地Web服务器(Tomcat)。我们可以在调试模式下运行并逐步完成代码 然而,我们随后将Java 我们如何调试生产Struts/Hibernate应用程序?,java,hibernate,struts,remote-debugging,production,Java,Hibernate,Struts,Remote Debugging,Production,因此,我们使用Netbeans 6.9.1,将代码推送到SVN服务器(dev)上,并在dev机器上运行连接到MySQL的本地Web服务器(Tomcat)。我们可以在调试模式下运行并逐步完成代码 然而,我们随后将WAR文件推送到生产机器(在生产数据库上)。这台机器与dev完全分离 但我们经常遇到问题。在Hibernate中,当我们对所有列进行了三次检查时,类似于null id,等等 我们需要的是一种将调试器附加到产品用户并逐步执行代码的方法 我们的选择是什么 谢谢你的建议 编辑 我想发布更多的信息
WAR
文件推送到生产机器(在生产数据库上)。这台机器与dev完全分离
但我们经常遇到问题。在Hibernate中,当我们对所有列进行了三次检查时,类似于null id
,等等
我们需要的是一种将调试器附加到产品
用户并逐步执行代码的方法
我们的选择是什么
谢谢你的建议
编辑
我想发布更多的信息。感谢那些提出建议的人
首先,我们的生产服务器托管3个应用程序(以及prod db)。我们遇到最多问题的应用程序只有一个用户,数据几乎与我们在dev中遇到的相同。我们在JDBC上遇到事务问题,无法找到它们的来源。如果您真的想将调试器附加到正在运行的生产服务器上,Java完全能够做到这一点。首先,使用以下命令运行服务器/JVM:
-Xrunjdwp:transport=dt_socket,address=8778,server=y,suspend=n
现在,您可以使用或中的prd_服务器:8788
地址连接IDE
然而,有几个问题:
- 您需要在指定端口上具有对生产服务器的TCP/IP访问权限。可能会涉及一些防火墙/SSH隧道
- 默认情况下,当调试器到达断点时,它可能会挂起所有线程。确保只挂起当前服务器,否则将冻结整个服务器
- …是的,远程调试是危险的,尤其是在生产中
- 处于调试模式/侦听调试连接的JVM可能会稍微慢一点(不过还没有看到)
最好在开发服务器上使用生产数据重新创建问题,添加更多日志记录等。在尝试调试产品之前,将产品数据迁移到开发环境并在那里进行调试。如果您有针对非产品环境中产品数据的安全策略,请根据需要清理数据
如果问题与数据有关,您应该很快解决。如果您愿意远程调试生产环境,那么小心它会减慢应用程序的速度。但如果您无法在development server上复制问题,请按照以下步骤远程调试应用程序:-
让我们知道您使用的是哪台生产服务器。prod中的数据与dev中的数据几乎相同。我们目前只有一个用户。