Java 我们如何调试生产Struts/Hibernate应用程序?

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,等等 我们需要的是一种将调试器附加到产品用户并逐步执行代码的方法 我们的选择是什么 谢谢你的建议 编辑 我想发布更多的信息

因此,我们使用Netbeans 6.9.1,将代码推送到SVN服务器(dev)上,并在dev机器上运行连接到MySQL的本地Web服务器(Tomcat)。我们可以在调试模式下运行并逐步完成代码

然而,我们随后将
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可能会稍微慢一点(不过还没有看到)

可以,但我不建议这样做,因为在连接调试器时,JVM的执行速度会显著降低,而且我相信每当遇到断点时,所有线程的执行都会暂停


最好在开发服务器上使用生产数据重新创建问题,添加更多日志记录等。

在尝试调试产品之前,将产品数据迁移到开发环境并在那里进行调试。如果您有针对非产品环境中产品数据的安全策略,请根据需要清理数据


如果问题与数据有关,您应该很快解决。

如果您愿意远程调试生产环境,那么小心它会减慢应用程序的速度。但如果您无法在development server上复制问题,请按照以下步骤远程调试应用程序:-

  • 确保生产服务器打开了调试端口以远程连接调试
  • 不同应用服务器的调试设置不同
  • 如果您使用的是Eclispe,请右键单击项目并转到调试配置,输入生产服务器名称/IP和端口号,然后单击调试按钮。Mkae确保您的服务器已打开调试端口

  • 让我们知道您使用的是哪台生产服务器。

    prod中的数据与dev中的数据几乎相同。我们目前只有一个用户。