文档章节

在Kubernetes中运行的应用程序的Java远程调试

xiaomin0322
 xiaomin0322
发布于 02/12 18:18
字数 1028
阅读 7
收藏 1

Kubernetes 1.2刚刚发布,正在迅速为容器(Docker,Rocket,Hyper等)提供真实的集群管理解决方案。看看你是否还没有 - 这里有关于1.2版本的一些有趣的花絮:

  • 现在,群集可以扩展到每个群集30,000个容器
  • 正常关闭节点,转换到集群中的其他运行节点
  • 自定义指标作为自动缩放的基础
  • 动态配置管理

KUBE

当您在本地笔记本电脑上开发微服务时,您可以使用类似Kubernetes的东西在本地运行docker容器,并在部署应用程序时获得开发人员/ QA /生产相似性。例如,您可以获得进程隔离,端口空间隔离,网络/存储等,因此不会在本地开发人员笔记本电脑上发生冲突。

Java Developers出现的一件事是如何查看日志,进行远程调试以及获取堆栈跟踪。

以下是一些提示:

你的豆荚的拖尾日志

在某些集群管理系统上,您必须基本上查找应用程序的本地IP(如果在容器中运行),以某种方式ssh进入它,然后查找日志并将其拖尾。使用Kubernetes,您无需执行任何操作。无论您运行的是哪台计算机(即运行kubernetes客户端的位置),您都可以执行以下操作:

列出群集中的pod

ceposta@postamac(~) $ kubectl get pod
NAME                        READY     STATUS    RESTARTS   AGE
broker-amq-1-hjbeh          1/1       Running   1          15h
file-ingress-events-3artj   1/1       Running   1          13h

记录日志

现在选择要从中流式传输日志的pod并继续!

ceposta@postamac(~) $ kubectl logs -f file-ingress-events-3artj

如果必须,请通过Shell连接

如果你由于某种原因必须登录pod(浏览文件系统,浏览其他配置文件等):

ceposta@postamac(~) $ kubectl exec -it file-ingress-events-3artj bash

JVM远程调试您的应用程序

这对于确切了解应用程序中发生的情况非常方便。要做到这一点,你并没有真正做与今天不同的事情。引导JVM时,您应该有办法启用JVM调试。例如,对于HawtApp Maven插件,它是一个简单的mvn插件,它将Java Main分配为可执行文件,以及一个简单,灵活的引导bin/run.sh脚本(或Windows的批处理文件),允许您通过环境变量控制类路径和调试

Bootstrap Java应用程序能够公开远程调试端口

例:

# Set debug options if required
if [ x"${JAVA_ENABLE_DEBUG}" != x ] && [ "${JAVA_ENABLE_DEBUG}" != "false" ]; then
    java_debug_args="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=${JAVA_DEBUG_PORT:-5005}"
fi

通过kubernetes清单在docker容器中定义调试端口

现在,您需要5005通过Kubernetes清单(json / yaml)文件在Docker容器中公开端口(在此示例中):

    spec:
        containers:
        - args: []
          command: []
          env:
          - name: "JAVA_ENABLE_DEBUG"
            value: "true"
          - name: "OUTGOING_FILE_PATH"
            value: "/deployments/camel/outgoing"
          - name: "INCOMING_FILE_PATH"
            value: "/deployments/camel/incoming"
          - name: "KUBERNETES_NAMESPACE"
            valueFrom:
              fieldRef:
                fieldPath: "metadata.namespace"
          image: "fabric8/file-ingress-events:1.0-SNAPSHOT"
          name: "file-ingress-events"
          ports:
          - containerPort: 5005
            name: "jvm-debug"
          - containerPort: 8778
            name: "jolokia"

注意,我们还在kubernetes清单文件中添加了一个env变量,以便能够控制是否要打开或关闭远程调试(true / false)。bootstrap脚本(上面)将检查env变量,你可以通过kube清单控制它(现在使用Kube 1.2中的ConfigMapOpenShift模板)。

最后一步是将调试端口代理到本地计算机。如果您在kubectl本地运行客户端,这很容易:

列出群集中的pod

ceposta@postamac(~) $ kubectl get pod
NAME                        READY     STATUS    RESTARTS   AGE
broker-amq-1-hjbeh          1/1       Running   1          15h
file-ingress-events-3artj   1/1       Running   1          13h

将pod代理到特定端口

ceposta@postamac(~) $ kubectl port-forward file-ingress-events-3artj  5005:5005

以上将从您的本地环境(5005)移植到pod的端口5005.现在您可以将远程调试器连接到localhost:5005

希望这可以帮助您调试Java应用程序!

本文转载自:https://blog.christianposta.com/kubernetes/java-remote-debug-for-applications-running-in-kubernet...

共有 人打赏支持
xiaomin0322
粉丝 126
博文 3621
码字总数 176015
作品 0
上海
架构师
私信 提问
eclipse远程debug,java项目

首先java项目要支付可远程调试得到启动时加入参数 启动远程调试 启用JMX,远程性能观察 eclipse配置 其中:host为远程java程序提供远程调试的IP,post为远程java程序提供远程调试的端口 使用 ...

有事没事
2014/12/05
0
0
使用 Eclipse 平台进行调试

调试是程序员无法回避的工作。调试方法有许多种,但归根结底,就是找到引发错误的代码。举例来说,在 Linux 应用程序中,分段故障被认为是最常见的错误之一。当程序尝试访问未分配给它的内存...

红薯
2010/01/12
1K
0
在Kubernetes 部署基于 MicroProfile 的 Java 微服务

要在如今快节奏的开发环境中取得成功,利用容器技术和 DevOps 实践来构建并持续交付微服务非常重要。本篇 Code Pattern 将展示如何使用 MicroProfile 和 Kubernetes 并借助您已掌握的技能和经...

宋庆离
2018/02/05
4.4K
3
远程调试运行在Resin上面的Web应用程序

有时候,我们不得不放弃在本地调试我们的程序,把我们的程序先布署到服务器,然后把调试信息都记在日志中,用眼睛瞅日志来调试程序。 不是用这种方式不行,只是效率太低,本来写程序是一件开...

古城痴人
2014/03/27
0
1
Google Jib 即将迎来正式版

Google Jib 用于封装 Java 应用,在去年夏天发布测试版。Jib 是一个快速而且简单的容器镜像构建器,他整合了将应用程序打包成镜像的所有步骤,而且支持开发人员使用其他 Java 容器工具构建镜...

程六金
前天
0
2

没有更多内容

加载失败,请刷新页面

加载更多

Kafka入门

1、Kafka使用背景 在我们大量使用分布式数据库、分布式计算集群的时候,是否会遇到这样的一些问题: 我们想分析下用户行为(pageviews),以便我们设计出更好的广告位 我想对用户的搜索关键词...

watermelon11
昨天
0
0
Cannot list resources Permission denied: user=Administrator, access=READ_EXECUTE, inode="/tmp"

Cannot list resources Permission denied: user=ÁõÎĺÁ, access=READ_EXECUTE, inode="/tmp":root:supergroup:drwx-wx-wx windows系统 Spring boot 整合hadoop时报错。 java.lang.Ille......

lwenhao
昨天
1
0
【结构型】- 享元模式

享元模式 作用:利用共享技术有效地支持大量细粒度对象的复用 享元模式状态 内部状态:在享元对象内部不随外界环境改变而改变的共享部分,存储于享元对象内部 外部状态:随着环境的改变而改变...

ZeroneLove
昨天
2
0
Vue 中使用UEditor富文本编辑器-亲测可用-vue-ueditor-wrap

一、Vue中在使用Vue CLI开发中默认没法使用UEditor 其中UEditor中也存在不少错误,再引用过程中。 但是UEditor相对还是比较好用的一个富文本编辑器。 vue-ueditor-wrap说明 Vue + UEditor + ...

tianma3798
昨天
5
0
php-fpm配置

php-fpm配置 修改bbs.wangzb.cc.conf配置文件,将端口9000改为9001,重新访问网站是失败的 修改配置文件 # vim /etc/nginx/conf.d/bbs.wangzb.cc.conf# nginx -s reloadfastcgi_pass 1...

wzb88
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部