欢送拜访我的GitHub
这里分类和汇总了欣宸的全副原创(含配套源码):https://github.com/zq2599/blog_demos
本篇概览
- 本文是《Java扩大Nginx》系列的第四篇,一起来体验个实用的性能,此能力定会让爱学习的您大呼过瘾,它就是宽广java程序员在日常开发和定位问题过程中罕用的神技:近程调试;
- 看变量、看堆栈,不管浏览代码还是定位问题,打断点都是咱们最值得信赖的伎俩,当您的代码运行在nginx-clojure模块中的时候,如果能像tomcat那样近程打断点,单步调试,会大幅度提高工作效率
-
近程断点的成果如下图所示,通过IDEA的<font color=”blue”>Remote JVM Debug</font>性能近程连贯到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是<font color=”blue”>/java</font>:
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";
- 上述配置中,<font color=”blue”>address=840#{pno}</font>的含意要留神:
- 如果worker_processes配置的值等于1,<font color=”blue”>address=840#{pno}</font>示意近程调试的端口是<font color=”red”>8401</font>
- 如果worker_processes配置的值大于1,例如等于3,此时有3个java过程,每个过程都有一个端口被用于近程调试,这三个端口别离是<font color=”blue”>address=840#{pno}</font>示意近程调试的端口是<font color=”red”>8401</font>、<font color=”red”>8402</font>、<font color=”red”>8403</font>
- 要留神的是,请确保这些端口没有被占用
- 明天的实战为了简略省事儿,worker_processes的值等于1,所以只有一个java过程,它的近程调试端口是<font color=”red”>8401</font>
- 配置实现后,启动nginx
-
用postman拜访<font color=”blue”>/java</font>,确认能够响应胜利,证实nginx和nginx-clojure是失常的:
IDEA上的近程调试操作
- 用IDEA关上工程,点击下图红框中的按钮:
- 操作如下图,新增一个<font color=”blue”>Remote JVM Debug</font>配置:
- <font color=”blue”>Remote JVM Debug</font>的设置如下,红框1是nginx的ip地址,我这里IDEA和nginx在同一台电脑上,所以用localhost即可,红框2是端口号,对应nginx配置的jvm_options中的<font color=”red”>address=840#{pno}</font>:
- 配置实现后,依照下图红框数字的程序操作,先在代码上打断点,而后执行近程连贯,顺利的话会看到红框3中的连贯胜利提醒:
-
至此,近程调试性能曾经筹备好,能够应用了
验证
- 在postman上再发一次申请,IDEA上立刻进入断点状态,如下图:
- 如果想看堆栈中的代码,能够操作如下图:
- 此刻,NginxClojureRT.java曾经被下载下来,能够更认真的浏览和钻研nginx-clojure了:
- 至此,nginx-clojure的近程调试性能演示结束,各位java同僚们,锦上添花的感觉有没有?学习和应用nginx-clojure的信念是否更强了呢?
欢送关注思否:程序员欣宸
学习路上,你不孤独,欣宸原创一路相伴…