关键词:
欢迎访问我的GitHub
这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos
本篇概览
- 本文是《Java扩展Nginx》系列的第四篇,一起来体验个实用的功能,此能力定会让爱学习的您大呼过瘾,它就是广大java程序员在日常开发和定位问题过程中常用的神技:远程调试;
- 看变量、看堆栈,不论阅读代码还是定位问题,打断点都是我们最值得信赖的手段,当您的代码运行在nginx-clojure模块中的时候,如果能像tomcat那样远程打断点,单步调试,会大幅度提高工作效率
- 远程断点的效果如下图所示,通过IDEA的Remote JVM Debug功能远程连接到nginx-clojure监听的远程debug端口,当浏览器请求触发了java代码的执行时,就会进入断点状态,停留在断点位置,可以看到堆栈和内存中的变量情况,以及单步执行:
关于工具
- 本篇使用的编码工具是IntelliJ IDEA 2021.3.2 (Ultimate Edition)
关于代码
- 本篇直接使用《Java扩展Nginx之一:你好,nginx-clojure》中的工程和代码,这里简单回顾如下,只有一个类:
package com.bolingcavalry.simplehello;
import nginx.clojure.java.ArrayMap;
import nginx.clojure.java.NginxJavaRingHandler;
import java.time.LocalDateTime;
import java.util.Map;
import static nginx.clojure.MiniConstants.CONTENT_TYPE;
import static nginx.clojure.MiniConstants.NGX_HTTP_OK;
public class HelloHandler implements NginxJavaRingHandler
@Override
public Object[] invoke(Map<String, Object> request)
return new Object[]
NGX_HTTP_OK, //http status 200
ArrayMap.create(CONTENT_TYPE, "text/plain"), //headers map
"Hello, Nginx clojure! " + LocalDateTime.now() //response body can be string, File or Array/Collection of them
;
- 在nginx.conf中,配置了一个location,path是/java:
location /java
content_handler_type 'java';
content_handler_name 'com.bolingcavalry.simplehello.HelloHandler';
- 以上就是今天要打断点调试的代码和配置了
nginx-clojure的远程调试配置
- 打开nginx.conf文件,在http的配置中增加以下两行,即可开启nginx-clojure的远程调试:
jvm_options "-Xdebug";
jvm_options "-Xrunjdwp:server=y,transport=dt_socket,address=840#pno,suspend=n";
- 上述配置中,address=840#pno的含义要注意:
- 如果worker_processes配置的值等于1,address=840#pno表示远程调试的端口是8401
- 如果worker_processes配置的值大于1,例如等于3,此时有3个java进程,每个进程都有一个端口被用于远程调试,这三个端口分别是address=840#pno表示远程调试的端口是8401、8402、8403
- 要注意的是,请确保这些端口没有被占用
- 今天的实战为了简单省事儿,worker_processes的值等于1,所以只有一个java进程,它的远程调试端口是8401
- 配置完成后,启动nginx
- 用postman访问/java,确认可以响应成功,证明nginx和nginx-clojure是正常的:
IDEA上的远程调试操作
- 用IDEA打开工程,点击下图红框中的按钮:
- 操作如下图,新增一个Remote JVM Debug配置:
- Remote JVM Debug的设置如下,红框1是nginx的ip地址,我这里IDEA和nginx在同一台电脑上,所以用localhost即可,红框2是端口号,对应nginx配置的jvm_options中的address=840#pno:
- 配置完成后,按照下图红框数字的顺序操作,先在代码上打断点,然后执行远程连接,顺利的话会看到红框3中的连接成功提示:
- 至此,远程调试功能已经准备好,可以使用了
验证
- 在postman上再发一次请求,IDEA上立即进入断点状态,如下图:
- 如果想看堆栈中的代码,可以操作如下图:
- 此刻,NginxClojureRT.java已经被下载下来,可以更仔细的阅读和研究nginx-clojure了:
- 至此,nginx-clojure的远程调试功能演示完毕,各位java同僚们,如虎添翼的感觉有没有?学习和使用nginx-clojure的信心是否更强了呢?
你不孤单,欣宸原创一路相伴
devops之四--publishoverssh远程部署
参考技术A可根据实际需求选择。问题:JAR包发送到服务器的位置不对解决方案:调整步骤二和步骤四的RemoteDirectory,最终的目录是连个RemoteDirectory拼接起来的。问题:JAR发送到服务器后,没有执行ExecCommand内的linux指令或shell脚本... 查看详情
远程debug调试java代码
远程debug调试java代码日常环境和预发环境遇到问题时,可以用远程调试的方法本地打断点,在本地调试。生产环境由于网络隔离和系统稳定性考虑,不能进行远程代码调试。整体过程是通过修改远程服务JAVA_OPTS参数... 查看详情
spring4.1.8扩展实战之四:感知spring容器变化(smartlifecycle接口)(代码片段)
欢迎访问我的GitHub本篇概览本章是《spring4.1.8扩展实战》的第四篇,如果业务上需要在spring容器启动和关闭的时候做一些操作,可以自定义SmartLifecycle接口的实现类来扩展,本章我们通过先分析再实战的方法,来掌握这种扩展方... 查看详情
Java远程调试-性能[重复]
】Java远程调试-性能[重复]【英文标题】:Javaremotedebugging-performance[duplicate]【发布时间】:2017-01-2021:20:40【问题描述】:如果您启动一个通过jdwp/socket启用远程调试的java进程并且没有外部进程连接,是否会对性能造成影响?我确... 查看详情
xdebug远程调试
...得用XDEBUG的远程调试功能。首先要给远程环境中安装XDEBUG扩展,具体方法:http://www.cnblogs.com/mysic/p/5993463.html在配置XDEBUG之前,需要先了解下XDEBUG的工作模式,尤其是远程debug时的方式,XDEBUG是需要先和开发端建立连接,启动会话 查看详情
idea远程调试java代码
文章目录1前言2远程Debug调试原理2.1理论基础2.2远程调试分类3主动连接调试3.1远程服务中开启Debug服务3.1.1对于SpringBoot3.1.2对于Tomcat3.2IDEA中指定Debug服务器3.3远程服务器防火墙端口放行4被动连接调试4.1对于Tomcat4.2对于SpringBoot5开始... 查看详情
idea远程调试java代码(代码片段)
文章目录1前言2远程Debug调试原理2.1理论基础2.2远程调试分类3主动连接调试3.1远程服务中开启Debug服务3.1.1对于SpringBoot3.1.2对于Tomcat3.2IDEA中指定Debug服务器3.3远程服务器防火墙端口放行4被动连接调试4.1对于Tomcat4.2对于SpringBoot5开始... 查看详情
使用 Chrome 远程调试工具进行跨浏览器调试
....如何使用Firefoxie等在Chromedevtools中调试东西,是否有任何扩展,如IE、Firefox的adb(远程客户端)。【问题讨论】 查看详情
通信算法之四:九种调试方式理论误码率与实际误码率
1.BPSK。DBPSK,2ASK,2FSK,QPSK。OQPSK。DQPSK。16QAM,64QAM,九种调制方式。理论误码率公式通过查看书本,用matlab绘图。能够知道理论误码率。2.信噪比SNR:0:0.1:20 信道环境:AWGN 仿真流程:调制+AWGN+解调+BER ... 查看详情
23种设计模式之四(装饰者模式)
...饰者模式:(动态的将新功能附加到对象上。在对象功能扩展方面,它比继承更有弹性) 其别名为包装器(Wrapper);装饰模式是一种对象结构模式。设计原则:对扩展开放、对修改关闭,这句话体现在我如果想扩展被装饰... 查看详情
Java 小程序不适用于小程序的远程调试
】Java小程序不适用于小程序的远程调试【英文标题】:JavaappletsdoesntnotworkingwithRemotedebuggingofapplet【发布时间】:2014-04-2316:12:12【问题描述】:我尝试对Java小程序使用远程调试。我正在使用Java7update51,当我尝试加载小程序时,它... 查看详情
如何使用idea远程调试java代码
...式有在本地搭建服务器进行启动或是debug,或是将项目在远程服务器上面部署。一般如果在本地搭建服务器的时候,可以直接选择启动或是直接debug,但是如果项目部署在远程的服务器上面的时候,我们该如何进行调试呢?而一... 查看详情
Intellij IDEA远程调试java控制台程序
】IntellijIDEA远程调试java控制台程序【英文标题】:IntellijIDEAremotelydebugjavaconsoleprogram【发布时间】:2015-04-2810:33:25【问题描述】:我有一个运行Java的远程服务器,我可以通过SSH访问它。我正在本地机器上编写一个应用程序,用mav... 查看详情
要设置哪些 Java 命令行选项以允许远程调试 JVM?
】要设置哪些Java命令行选项以允许远程调试JVM?【英文标题】:WhatareJavacommandlineoptionstosettoallowJVMtoberemotelydebugged?【发布时间】:2010-09-1309:40:14【问题描述】:我知道有一些JAVA_OPTS可以设置为远程调试Java程序。它们是什么,它... 查看详情
使用 Eclipse 或其他方式在 Linux 目标上进行 Java 远程调试
】使用Eclipse或其他方式在Linux目标上进行Java远程调试【英文标题】:JavaremotedebuggingonlinuxtargetusingEclipseorotherwise【发布时间】:2014-09-1823:50:05【问题描述】:谁能告诉我在linux目标上远程调试Java的好方法?我所追求的是一些方法... 查看详情
使用idea远程debug调试(详细)(代码片段)
...og、不停的打包部署。这是何等的浪费时间呀。1:什么是远程调试 远程调试(对应IDEA功能:RemoteJVMDebug)。远程调试使开发人员能够直接诊断服务器或其它线上进程上的问题,它提供了跟踪线上运行时错误并确定性能瓶颈和... 查看详情
java项目部署与远程调试两三事
【开启和进行远程调试】参考https://blog.csdn.net/WSYW126/article/details/748536801、tomcat:配置catalina.shjpda参数,主要是address./catalina.shjpdastart2、springbootmaven插件or命令行<plugin><groupId>org.springframework 查看详情
如何从 Maven 命令行远程调试 Java 应用程序
】如何从Maven命令行远程调试Java应用程序【英文标题】:Howtoremotedebugjavaapplicationfrommavencommandline【发布时间】:2014-03-0808:20:02【问题描述】:我有一个在IntelliJ中运行的java应用程序。我可以知道如何从Maven命令行远程调试应用程... 查看详情