Java扩展Nginx之四:远程调试

这篇具有很好参考价值的文章主要介绍了Java扩展Nginx之四:远程调试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

欢迎访问我的GitHub

这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos

本篇概览

  • 本文是《Java扩展Nginx》系列的第四篇,一起来体验个实用的功能,此能力定会让爱学习的您大呼过瘾,它就是广大java程序员在日常开发和定位问题过程中常用的神技:远程调试;
  • 看变量、看堆栈,不论阅读代码还是定位问题,打断点都是我们最值得信赖的手段,当您的代码运行在nginx-clojure模块中的时候,如果能像tomcat那样远程打断点,单步调试,会大幅度提高工作效率
  • 远程断点的效果如下图所示,通过IDEA的Remote JVM Debug功能远程连接到nginx-clojure监听的远程debug端口,当浏览器请求触发了java代码的执行时,就会进入断点状态,停留在断点位置,可以看到堆栈和内存中的变量情况,以及单步执行:
    Java扩展Nginx之四:远程调试

关于工具

  • 本篇使用的编码工具是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}的含义要注意:
  1. 如果worker_processes配置的值等于1,address=840#{pno}表示远程调试的端口是8401
  2. 如果worker_processes配置的值大于1,例如等于3,此时有3个java进程,每个进程都有一个端口被用于远程调试,这三个端口分别是address=840#{pno}表示远程调试的端口是840184028403
  • 要注意的是,请确保这些端口没有被占用
  • 今天的实战为了简单省事儿,worker_processes的值等于1,所以只有一个java进程,它的远程调试端口是8401
  • 配置完成后,启动nginx
  • 用postman访问/java,确认可以响应成功,证明nginx和nginx-clojure是正常的:
    Java扩展Nginx之四:远程调试

IDEA上的远程调试操作

  • 用IDEA打开工程,点击下图红框中的按钮:
    Java扩展Nginx之四:远程调试
  • 操作如下图,新增一个Remote JVM Debug配置:
    Java扩展Nginx之四:远程调试
  • Remote JVM Debug的设置如下,红框1是nginx的ip地址,我这里IDEA和nginx在同一台电脑上,所以用localhost即可,红框2是端口号,对应nginx配置的jvm_options中的address=840#{pno}
    Java扩展Nginx之四:远程调试
  • 配置完成后,按照下图红框数字的顺序操作,先在代码上打断点,然后执行远程连接,顺利的话会看到红框3中的连接成功提示:
    Java扩展Nginx之四:远程调试
  • 至此,远程调试功能已经准备好,可以使用了

验证

  • 在postman上再发一次请求,IDEA上立即进入断点状态,如下图:
    Java扩展Nginx之四:远程调试
  • 如果想看堆栈中的代码,可以操作如下图:
    Java扩展Nginx之四:远程调试
  • 此刻,NginxClojureRT.java已经被下载下来,可以更仔细的阅读和研究nginx-clojure了:
    Java扩展Nginx之四:远程调试
  • 至此,nginx-clojure的远程调试功能演示完毕,各位java同僚们,如虎添翼的感觉有没有?学习和使用nginx-clojure的信心是否更强了呢?

欢迎关注博客园:程序员欣宸

学习路上,你不孤单,欣宸原创一路相伴...文章来源地址https://www.toymoban.com/news/detail-555719.html

到了这里,关于Java扩展Nginx之四:远程调试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Net 高级调试之四:Windbg 动态调试

    一、简介 今天是《Net 高级调试》的第四篇文章。到今天为止,也有三篇文章了,对 Windbg 也有初步的认识了,当然,一个工具流畅、熟练的使用,对于我们调试 Net 程序是至关重要的。在前几篇文章的基础上,我们这篇文章主要介绍一些和使用 Windbg 有关的命令和操作。就我

    2024年02月06日
    浏览(36)
  • Java扩展Nginx之七:共享内存

    这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 作为《Java扩展Nginx》系列的第七篇,咱们来了解一个实用工具 共享内存 ,正式开始之前先来看一个问题 在一台电脑上,nginx开启了多个worker,如下图,如果此时我们用了nginx-clojure,就相当于有了四

    2024年02月16日
    浏览(29)
  • 树莓派使用Nginx 搭建轻量级网站远程访问

    转载自cpolar极点云文章:树莓派使用Nginx 搭建轻量级网站远程访问 安装 Nginx(发音为“engine-x”)可以将您的树莓派变成一个强大的 Web 服务器,可以用于托管网站或 Web 应用程序。相比其他 Web 服务器,Nginx 的内存占用率非常低,可以在树莓派等资源受限的设备上运行。同时

    2024年02月11日
    浏览(36)
  • Java扩展Nginx之一:你好,nginx-clojure

    这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 以欣宸自己为例,对一个java程序员来说,nginx并不陌生,下图应该是最常见的使用场景了,反向代理: 除了反向代理,nginx的模块化机制让nginx具备了更多丰富的特性,例如ngx_http_log_module(日志)、

    2024年02月13日
    浏览(28)
  • Java扩展Nginx之二:编译nginx-clojure源码

    这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 作为《Java扩展Nginx》的第二篇,本想与大家一起开始nginx-clojure的深度之旅,但有个问题若不解决,会让大多数有兴趣的读者立即止步、关闭网页、再也不见 前文咱们使用的是nginx-clojure官方的安装包

    2024年02月13日
    浏览(39)
  • Java扩展Nginx之六:两大filter

    这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本文是《Java扩展Nginx》系列的第六篇,前文的五大handler形成了nginx-clojure开发的基本框架,初步评估已经可以支撑简单的需求开发了,但nginx-clojure并未止步于handler,还提供了丰富的扩展能力,本篇的

    2024年02月16日
    浏览(28)
  • Java扩展Nginx之三:基础配置项

    这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 经历了前面两篇的入门和编译源码之后,从本篇起,咱们用理论结合实战的方式进入系统的nginx-clojure学习之旅 作为《Java扩展Nginx》系列的第三篇,本文会与大家一起了解nginx-clojure基本的配置项,通

    2024年02月13日
    浏览(29)
  • FastDFS+Nginx搭建本地服务器并实现远程访问

    FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。 FastDFS为互联网量身定制,充分考

    2024年02月06日
    浏览(36)
  • 精选版:用Java扩展Nginx(nginx-clojure 入门)

    这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 今天咱们以Java程序员的视角,来聊聊如何用Java来扩展Nginx的能力,全文由以下内容组成: 什么是Nginx 什么是Nginx扩展 扩展Nginx,意义何在? 想用Java扩展Nginx会有问题吗? 主角登场:nginx-clojure模块,

    2024年02月09日
    浏览(29)
  • 详解-树莓派使用Nginx 搭建轻量级网站远程访问(1)

    转载自cpolar极点云文章:树莓派使用Nginx 搭建轻量级网站远程访问 安装 Nginx(发音为“engine-x”)可以将您的树莓派变成一个强大的 Web 服务器,可以用于托管网站或 Web 应用程序。相比其他 Web 服务器,Nginx 的内存占用率非常低,可以在树莓派等资源受限的设备上运行。同时

    2024年02月12日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包