[英]How can we debug our production Struts/Hibernate apps?
因此,我們使用Netbeans 6.9.1
,將我們的代碼推送到SVN服務器(dev),然后運行連接到DEV計算機上MySQL的本地Web服務器(Tomcat)。 我們可以在調試模式下運行並逐步執行代碼。
但是,我們然后獲取WAR
文件,將其推送到生產機器(在生產數據庫中)。 該機器與開發人員完全分開。
但是我們遇到了持續的問題。 當我們對所有列進行三重檢查時,諸如Hibernate中的null id
之類的事情,等等。
我們需要的是一種將調試器附加到PRODUCTION
用戶並逐步執行代碼的方法。
我們有什么選擇?
感謝您的任何建議。
編輯
我想發布更多信息。 感謝那些提供建議的人。
首先,我們的生產服務器托管3個應用程序(以及prod數據庫)。 我們遇到最多問題的應用只有一個用戶,數據幾乎與開發人員的數據相同。 我們在JDBC中遇到事務問題,無法找到問題的根源。
如果您確實想將調試器附加到正在運行的生產服務器上,則Java完全可以做到這一點。 首先,使用以下命令運行服務器/ JVM:
-Xrunjdwp:transport=dt_socket,address=8778,server=y,suspend=n
現在,您可以使用Eclipse或IntelliJ IDEA中的 prd_server:8788
地址連接IDE。
但是,有一些陷阱:
您需要在指定端口上具有對生產服務器的TCP / IP訪問。 可能會涉及一些防火牆/ SSH隧道。
默認情況下,調試器在遇到斷點時可能會掛起所有線程。 確保僅暫停當前服務器,否則將凍結整個服務器。
...是的,遠程調試很危險 ,尤其是在生產環境中。
處於調試模式/偵聽調試連接的JVM可能會稍微慢一些(雖然沒有看到)。
如果您願意遠程調試生產環境而不是提防它會減慢您的應用程序。 但是,如果您不能在開發服務器上復制問題,請按照以下步驟遠程調試應用程序:-
讓我們知道您正在使用哪個生產服務器。
您可以 將Tomcat配置為允許遠程調試器連接 ,但是我不建議這樣做,因為在連接調試器時 ,這會大大減慢JVM的執行速度,而且我相信,只要遇到斷點,所有線程的執行都會暫停。
使用開發服務器上的生產數據,添加更多日志記錄等來重新創建問題要好得多。
在嘗試調試Prod之前,請將您的Prod數據向下遷移到Dev env並在那里進行調試。 如果您有針對非Prod環境中Prod數據的安全策略,請根據需要清理數據。
如果問題與數據有關,則應盡快解決。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.