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

问题描述 投票:0回答:4

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

但是,我们然后获取WAR文件,将其推送到生产机器(在生产数据库中)。 该机器与开发人员完全分开。

但是我们遇到了持续的问题。 当我们对所有列进行三重检查时,诸如Hibernate中的null id之类的事情,等等。

我们需要的是一种将调试器附加到PRODUCTION用户并逐步执行代码的方法。

我们有什么选择?

感谢您的任何建议。

编辑

我想发布更多信息。 感谢那些提供建议的人。

首先,我们的生产服务器托管3个应用程序(以及prod数据库)。 我们遇到最多问题的应用只有一个用户,数据几乎与开发人员的数据相同。 我们在JDBC中遇到事务问题,无法找到问题的根源。

java hibernate struts remote-debugging production
4个回答
1
投票

如果您确实想将调试器附加到正在运行的生产服务器上,则Java完全可以做到这一点。 首先,使用以下命令运行服务器/ JVM:

-Xrunjdwp:transport=dt_socket,address=8778,server=y,suspend=n

现在,您可以使用EclipseIntelliJ IDEA中的 prd_server:8788地址连接IDE。

但是,有一些陷阱:

  • 您需要在指定端口上具有对生产服务器的TCP / IP访问。 可能会涉及一些防火墙/ SSH隧道。

  • 默认情况下,调试器在遇到断点时可能会挂起所有线程。 确保仅暂停当前服务器,否则将冻结整个服务器。

  • ...是的,远程调试很危险 ,尤其是在生产环境中。

  • 处于调试模式/侦听调试连接的JVM可能会稍微慢一些(虽然没有看到)。


0
投票

如果您愿意远程调试生产环境而不是提防它会减慢您的应用程序。 但是,如果您不能在开发服务器上复制问题,请按照以下步骤远程调试应用程序:-

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

让我们知道您正在使用哪个生产服务器。


0
投票

可以 将Tomcat配置为允许远程调试器连接 ,但是我不建议这样做,因为在连接调试器时 ,这会大大减慢JVM的执行速度,而且我相信,只要遇到断点,所有线程的执行都会暂停。

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


0
投票

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

如果问题与数据有关,则应尽快解决。

© www.soinside.com 2019 - 2024. All rights reserved.