我使用docker容器部署了一个微服务,希望检查jvm信息。所以我进入容器,找到pid。然后,我运行jmap-heap-pid命令,但得到以下错误日志:
如何修复它?
在Linux中,jmap-heap
在可服务性代理之上工作,而可服务性代理又依赖于ptrace
syscall。
默认情况下,ptrace
需要root权限(或者更准确地说,CAP_SYS_ptrace
功能)。此外,docker默认安全配置文件拒绝seccomp或apparmor的ptrace
syscall。
因此,为了在容器中允许ptrace
和jmap-heap
,可能需要添加以下docker选项:
--cap-add=SYS_PTRACE --security-opt=seccomp:unconfined --security-opt=apparmor:unconfined
注意:从安全角度来看,这不是最好的解决方案。请参阅docker手册,了解如何在不关闭seccomp和apparmor的情况下启用特定的系统调用。
更好的选择是完全避免jmap-heap
。在不支持可维护性代理的情况下,还有其他有效的方法来监视JVM,例如jcmd
、jstat
和JMX
。
问题内容: 如何将控制台/终端视图“附加”到应用程序输出,以便我可以看到它在说什么? 在不终止应用程序的情况下,如何与应用程序输出分离? 通常,如果使用命令行启动健谈的应用程序,则会看到各种精彩的输出。但是,假设我正在运行一个特别健谈的编程(例如KINO),并且我想在任何给定时刻查看其输出,而无需通过命令行重新启动它。我不能; 至少我不知道如何。 问题答案: 这里有一些选择。一种是将命令的输出重定
问题内容: 我在log4j2中创建了一个自定义附加程序。使用自定义追加程序时,出现以下错误:“ ERROR试图追加到未启动的追加程序”。任何帮助表示赞赏。 问题答案: Log4j 2将检查每个日志事件附加器是否处于可用状态。您看到的错误是Log4j检测到尚未准备好使用附加程序。 一些附加器需要进行准备才能使用。在生命周期的方法是其中追加程序可以做初始化的地方。Log4j不会将事件路由到未处于STA
我在Ubuntu虚拟机上运行Java应用程序,命令如下: 我用命令打开了端口9999(在VirtualBox中也是转发端口): 最后我以错误告终 我对远程调试不是很有经验。请问可以给java -server进程附加调试器吗?
实际上,我想要一个适用于JEE容器的解决方案,特别是适用于Glassfish,但在我尝试了多种设置组合但没有成功后,我将设置简化为最简单的情况。 这是我在 Docker 容器中启动的 Hello World 守护进程。我想将或附加到它。一切都在同一台机器上。 Dockerfile 构建: 正在运行: 问题: 哪些 JVM 参数应该添加到 命令行? 应公开和发布哪些端口? Docker 容器应该使用
问题内容: 我只想查看流程的状态,是否可以将控制台附加到流程中,所以我可以在流程内部调用函数并查看一些全局变量。 最好在不受影响的情况下运行该进程(当然,性能可能会下降一点) 问题答案: 如果您有权访问程序的源代码,则可以相对轻松地添加此功能。 参见配方576515: 去引用: 这提供了允许所有使用它的python程序在当前点被中断并通过普通python交互式控制台进行通信的代码。这允许调查本地,
问题内容: 实际上,我想要一个适用于JEE容器(特别是Glassfish)的解决方案,但是在尝试了多种设置组合但没有成功后,我将设置简化为最简单的情况。 这是我在Docker容器中启动的Hello World守护程序。我想附加或附加到它。一切都在同一台机器上。 Docker文件 建造: 运行: 问题: 哪些JVM参数应添加到命令行? 应该公开和发布哪些端口? Docker容器应使用哪种网络模式?