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

时间:2011-10-18 20:27:51

标签: java hibernate struts remote-debugging production

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

然而,我们接着我们的WAR文件,推送到生产机器(在生产数据库上)。这台机器完全独立于开发。

但是我们遇到了不断的问题。当我们对所有列进行三重检查等时,Hibernate中的null id等事情

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

我们有什么选择?

感谢您的任何建议。

修改

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

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

4 个答案:

答案 0 :(得分:1)

如果您确实想将调试器附加到正在运行的生产服务器,那么Java完全有能力执行此操作。首先,使用以下命令运行服务器/ JVM:

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

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

但是很少有问题:

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

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

  • ...是的,远程调试危险,特别是在生产方面。

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

答案 1 :(得分:0)

可以 configure Tomcat to allow remote debugger connections,但我不建议这样做,因为你会在连接调试器时显着降低JVM的执行速度,而且我相信每当遇到一个断点时所有线程的执行都将暂停。

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

答案 2 :(得分:0)

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

如果问题与数据相关,则应该相当快地点击它。

答案 3 :(得分:0)

如果您愿意远程调试生产环境而不是提防,则会降低您的应用速度。但是如果您无法在开发服务器上复制问题,请按照远程调试应用程序的步骤进行操作: -

  1. 确保您的生产服务器打开调试端口以远程连接调试。
  2. 针对不同的应用程序服务器的调试设置不同
  3. 如果您使用Eclispe而不是右键单击项目并转到调试配置,请输入生产服务器名称/ IP和端口号,然后点击调试按钮。 Mkae确保您的服务器打开了调试端口
  4. 告诉我们您正在使用的生产服务器。