java - 如何使用 IntelliJ IDEA 调试部署在集群环境中的 Java 应用程序?
问题描述
每次当我需要调试部署在集群环境中的Java应用程序时,我都遇到了大麻烦。
公司的环境(测试、验收等)通常是具有多个服务器的集群环境,并且在集群前面,有一个代理服务器将请求(HTTP)转发到集群中的一台服务器。如果您无权访问各个服务器,并且不允许从一台特定服务器午餐应用程序,那么您必须使用来自代理的端点。
据我所知,一台 IntelliJ 只能打开一个远程调试连接。这意味着如果请求发送到集群中的另一台服务器(我的调试器未连接),那么我在调试窗口中看不到任何内容。下次吧。
如果你幸运的话,你可以停止集群中的所有服务器,除了你正在调试的一个。但是停止服务器也不是一件容易的事,尤其是在验收环境中。
据我的同事说,我可以用一个 Eclipse 实例调试多个服务器,但我真的不想使用 Eclipse。
好的,我想我可以将整个源代码复制到不同的文件夹,使用新的 IntelliJ 实例打开代码,然后我可以从那里连接到集群中的第二台服务器。但这是一个痛苦的 hack。
有没有什么正常的方法可以用 IntelliJ 调试多台服务器的集群环境?
解决方案
You can open as many number of debug sessions as many remote JVM are running on remote ends (on corresponding ip address and tcp port) by creating multiply Run Configurations and launch them:
For example to connect with the above host and port, the remove JVM must be started with
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
if you use JDK version 8 or less, and the
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005
if you use JDK version 9 or newer.
推荐阅读
- r - 从列表中绘制多个图
- java - 难以使用流过滤对象列表
- go - 如何将错误消息从 C 传递到 Go?
- xamarin - 项目上的错误和代码上的 VS 上的 redLine 没有错误。赛马林
- android - ANR 警告:OnMeasure 时间太长
- bash - 在 Bash 脚本中模拟 TAB 键以自动完成
- c# - 在 .NET Core 上创建 HttpMessageHandler 并可以向自己发出请求
- c# - 发送网络推送通知并收到意外响应代码:401 & 403
- android - android中的按钮忽略背景可绘制资源
- javascript - 如何在 PHP(Laravel) 中生成 Cloudinary 身份验证签名