【问题标题】:How can we debug our production Struts/Hibernate apps?我们如何调试我们的生产 Struts/Hibernate 应用程序?
【发布时间】:2011-10-18 20:27:50
【问题描述】:

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

但是,我们随后将 WAR 文件推送到生产机器(在生产数据库上)。这台机器与 dev 完全分离。

但是我们经常遇到问题。当我们对所有列进行三次检查时,Hibernate 中的 null id 之类的东西等等。

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

我们有哪些选择?

感谢您的建议。

编辑

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

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

【问题讨论】:

    标签: java hibernate struts remote-debugging production


    【解决方案1】:

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

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

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

    但是有一些陷阱:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

        • prod 中的数据与 dev 中的数据几乎相同。目前我们只有一个用户。
        【解决方案4】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-01-29
          • 1970-01-01
          • 1970-01-01
          • 2015-01-10
          • 1970-01-01
          • 1970-01-01
          • 2018-11-03
          相关资源
          最近更新 更多