zoukankan      html  css  js  c++  java
  • 【从零单排】Java远程调试Remote Debug的二三事

    问题

    笔者对于本地调试已经有很多经验了,一般流程是:在IDE中设置断点,配置参数,开始调试。这里的程序是跑在本地的机器上的。

    而在实际开发或者生产环境中,应用都是部署在某个服务器上的,服务器上的机器性能更强大,而且可以起集群协同处理。

    由于本地的机器的资源限制(笔者的台式机6核16G内存),对于大型应用来说远远不够,某些时候为了跑UAT测试,必须把应用部署到远端的服务器上,这个时候就需要远程调试了。

    命令

    远程调试和本地调试的思路是一致的,唯一的区别就是,需要让IDE attach到远端服务器的应用上去。

    这里有个前提就是,在起JVM的时候,必须设置使其支持远程调试,命令如下(JDK 1.5 +):

    -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=6060
    

    参数的含义如下:

    • jdwp:加载JDWP的JPDA参考执行实例。
    • transport:用于在调试程序和 VM 使用的进程之间通讯。
    • dt_socket:套接字传输。
    • server=y/n:VM 是否需要作为调试服务器执行。
    • address=6060:调试服务器的端口号,客户端用来连接服务器的端口号。
    • suspend=y/n:是否在调试客户端建立连接之后启动 VM 。

    对于JDK 1.4及以下的,参数略微有所区别。

    一般来说,需要改动的是address,且需要确保该端口在服务器上是可用的,没有冲突。

    验证

    将应用正确在服务器上部署好之后,使用ps -aux | grep java命令可以查看server上的Java应用,找到我们的应用如下:

    /opt/sunjdk/jdk1.8.0u45_64/bin/java 
    -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=6060 
    -XX:+UseG1GC -Xmx140G -Xms5G -Xss10M -XX:NewSize=4G -Dcom.nomura.fixp.watchdog.timeout.minutes=30 
    -verbose:gc 
    -Xloggc:/home/user1/LOGS/app_log.log
    -XX:+PrintGCDetails
    -XX:+PrintGCTimeStamps
    -Dcom.sun.management.jmxremote.port=1785
    -Dcom.sun.management.jmxremote.authenticate=false 
    -Dcom.sun.management.jmxremote.ssl=false 
    -Dlog4j.configuration=file:///home/user1/App/resources/log4j.properties
    -cp path1:path2:path3 com.dummy.App
    

    可以看到启动参数中已经正确设置了远程调试。

    连接

    接下来,我们就需要在IDE中,连接到这个端口。在IntelliJ中,配置如下:

    debug_1.png

    这里需要我们填的是Host和Port。

    然后,就可以愉快地跑起来了~

    需要注意的是,远程调试由于需要网络传输,如果服务器在国外,可能会非常慢。

    参考

  • 相关阅读:
    2021,6,10 xjzx 模拟考试
    平衡树(二)——Treap
    AtCoder Beginner Contest 204 A-E简要题解
    POJ 2311 Cutting Game 题解
    Codeforces 990G GCD Counting 题解
    NOI2021 SDPTT D2T1 我已经完全理解了 DFS 序线段树 题解
    第三届山东省青少年创意编程与智能设计大赛总结
    Luogu P6042 「ACOI2020」学园祭 题解
    联合省选2021 游记
    Codeforces 1498E Two Houses 题解 —— 如何用结论吊打标算
  • 原文地址:https://www.cnblogs.com/maxstack/p/12877974.html
Copyright © 2011-2022 走看看