国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Docker 中 jdk8容器里無法使用 JDK 的 jmap 等命令的問題

這篇具有很好參考價值的文章主要介紹了Docker 中 jdk8容器里無法使用 JDK 的 jmap 等命令的問題。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

一、問題描述

項目部署在 CentOS 服務(wù)器上。項目偶爾會出現(xiàn)無響應(yīng)的情況,這時理所當(dāng)然要上去用 JDK 相關(guān)命令看看堆棧和GC等信息了。

進(jìn)入 Java 程序所在容器:docekr-compose exec api bash,進(jìn)入到 api 容器的 bash 終端。

jps 打印 Java 進(jìn)程:

# jps
11 wallet-coin-1.0-SNAPSHOT.jar
1758 Jps

嗯,jps 命令還是能正常使用的,api.jar 程序的進(jìn)程號是1。

jmap 命令打印堆棧摘要信息:jmap -heap 11,然而,報錯了!

bash-4.4# jmap  -heap 11
Attaching to process ID 11, please wait...
Error attaching to process: sun.jvm.hotspot.debugger.DebuggerException: Can't attach to the process: ptrace(PTRACE_ATTACH, ..) failed for 11: Operation not permitted
sun.jvm.hotspot.debugger.DebuggerException: sun.jvm.hotspot.debugger.DebuggerException: Can't attach to the process: ptrace(PTRACE_ATTACH, ..) failed for 11: Operation not permitted
	at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal$LinuxDebuggerLocalWorkerThread.execute(LinuxDebuggerLocal.java:163)
	at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal.attach(LinuxDebuggerLocal.java:278)
	at sun.jvm.hotspot.HotSpotAgent.attachDebugger(HotSpotAgent.java:671)
	at sun.jvm.hotspot.HotSpotAgent.setupDebuggerLinux(HotSpotAgent.java:611)
	at sun.jvm.hotspot.HotSpotAgent.setupDebugger(HotSpotAgent.java:337)
	at sun.jvm.hotspot.HotSpotAgent.go(HotSpotAgent.java:304)
	at sun.jvm.hotspot.HotSpotAgent.attach(HotSpotAgent.java:140)
	at sun.jvm.hotspot.tools.Tool.start(Tool.java:185)
	at sun.jvm.hotspot.tools.Tool.execute(Tool.java:118)
	at sun.jvm.hotspot.tools.HeapSummary.main(HeapSummary.java:49)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at sun.tools.jmap.JMap.runTool(JMap.java:201)
	at sun.tools.jmap.JMap.main(JMap.java:130)
Caused by: sun.jvm.hotspot.debugger.DebuggerException: Can't attach to the process: ptrace(PTRACE_ATTACH, ..) failed for 11: Operation not permitted
	at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal.attach0(Native Method)
	at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal.access$100(LinuxDebuggerLocal.java:62)
	at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal$1AttachTask.doit(LinuxDebuggerLocal.java:269)
	at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal$LinuxDebuggerLocalWorkerThread.run(LinuxDebuggerLocal.java:138)

二、解決方案

這其實(shí)不是什么 Bug,而是 Docker 自 1.10 版本開始加入的安全特性。

類似于 jmap 這些 JDK 工具依賴于 Linux 的 PTRACE_ATTACH,而是 Docker 自 1.10 在默認(rèn)的 seccomp 配置文件中禁用了 ptrace。

這篇文章介紹了整個的緣由以及應(yīng)對方法:JVM in Docker and PTRACE_ATTACH

主要提及三種:

2.1 –security-opt seccomp=unconfined

簡單暴力(不推薦),直接關(guān)閉 seccomp 配置。用法:

docker run --security-opt seccomp:unconfined ...

2.2 –cap-add=SYS_PTRACE

使用 --cap-add 明確添加指定功能:

docker run --cap-add=SYS_PTRACE ...

2.3 Docker Compose 的支持

Docker Compose 自 version 1.1.0 (2015-02-25) 起支持 cap_add。官方文檔:cap_add, cap_drop。用法:

docker-compose.yml 改寫后文件內(nèi)容如下(相同內(nèi)容部分就不重復(fù)貼了):

version: '2'

services:
  mysql:
    ...
  api:
    ...
    cap_add:
      - SYS_PTRACE
      

三、驗(yàn)證

因?yàn)槲沂菃蝹€容器,所以選擇了第二種解決方法,將docker容器關(guān)閉刪除后,在docker容器啟動命令中加入:–cap-add=SYS_PTRACE,容器啟動執(zhí)行jmap -heap 11可以打印服務(wù)gc信息了文章來源地址http://www.zghlxwxcb.cn/news/detail-701562.html

# jmap -heap 11
Attaching to process ID 11, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.172-b11

using parallel threads in the new generation.
using thread-local object allocation.
Concurrent Mark-Sweep GC

Heap Configuration:
   MinHeapFreeRatio         = 40
   MaxHeapFreeRatio         = 70
   MaxHeapSize              = 1073741824 (1024.0MB)
   NewSize                  = 134217728 (128.0MB)
   MaxNewSize               = 134217728 (128.0MB)
   OldSize                  = 939524096 (896.0MB)
   NewRatio                 = 2
   SurvivorRatio            = 8
   MetaspaceSize            = 134217728 (128.0MB)
   CompressedClassSpaceSize = 125829120 (120.0MB)
   MaxMetaspaceSize         = 134217728 (128.0MB)
   G1HeapRegionSize         = 0 (0.0MB)

Heap Usage:
New Generation (Eden + 1 Survivor Space):
   capacity = 120848384 (115.25MB)
   used     = 61863776 (58.997894287109375MB)
   free     = 58984608 (56.252105712890625MB)
   51.19123148556128% used
Eden Space:
   capacity = 107479040 (102.5MB)
   used     = 57787616 (55.110565185546875MB)
   free     = 49691424 (47.389434814453125MB)
   53.766405059070124% used
From Space:
   capacity = 13369344 (12.75MB)
   used     = 4076160 (3.8873291015625MB)
   free     = 9293184 (8.8626708984375MB)
   30.488855698529413% used
To Space:
   capacity = 13369344 (12.75MB)
   used     = 0 (0.0MB)
   free     = 13369344 (12.75MB)
   0.0% used
concurrent mark-sweep generation:
   capacity = 939524096 (896.0MB)
   used     = 93429680 (89.10148620605469MB)
   free     = 846094416 (806.8985137939453MB)
   9.94436229978289% used

39322 interned Strings occupying 4867000 bytes.

到了這里,關(guān)于Docker 中 jdk8容器里無法使用 JDK 的 jmap 等命令的問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 解決jenkins需要jdk11,項目需要jdk8的問題

    解決jenkins需要jdk11,項目需要jdk8的問題

    思路:jdk8 采用解壓縮模式,jdk11采用安裝模式,然后在jenkins中指定jdk路徑 下載解壓縮jdk8 https://www.oracle.com/java/technologies/downloads/#java8 解壓縮:jdk-8u391-linux-i586.tar.gz /lib/ld-linux.so.2: bad ELF interpreter: 沒有那個文件或目錄 yum install glibc.i686 ? 安裝jdk11 jenkins中指定 ?

    2024年02月02日
    瀏覽(32)
  • Docker拉取jdk8鏡像失敗解決方案

    Docker拉取jdk8鏡像失敗解決方案

    Docker拉取jdk8失敗解決方案 最近使用docker部署demo時,需要配置java環(huán)境變量,拉取jdk8時,拉取失敗,本文記錄解決方案: 拉取鏡像時,使用的命令是: docker pull java:8 出現(xiàn)了以下情況 : 解決方案: 使用以下拉取命令即可: docker pull openjava:8 使用命令 docker images 查看鏡像,可

    2024年02月11日
    瀏覽(85)
  • JDK 常用工具 —— jmap 詳解

    jmap 是 JDK 自帶的一個命令行工具,可以用于生成 Java Heap Dump 文件,以及查看 Java 進(jìn)程中的內(nèi)存使用情況。 本文內(nèi)容來自一篇整理得非常詳細(xì)的文檔: https://juejin.cn/post/6844904062526160904 option:命令選項,常用選項如下: -heap:打印 Java 堆概要信息,包括使用的 GC 算法、堆配置

    2024年02月06日
    瀏覽(16)
  • 為什么很多企業(yè)依然再用jdk8而不是使用最新版本jdk17?

    為什么很多企業(yè)依然再用jdk8而不是使用最新版本jdk17?

    兼容性問題:JDK 8 是一個經(jīng)過長期使用和測試的穩(wěn)定版本,與許多企業(yè)應(yīng)用程序和庫已經(jīng)兼容,而升級到新版本可能會導(dǎo)致兼容性問題。如果企業(yè)應(yīng)用程序依賴于不再支持的 API 或過時的庫,則升級到 JDK 17 可能需要進(jìn)行重大更改。 安全問題:JDK 8 仍然受到支持,包括安全更

    2024年02月12日
    瀏覽(21)
  • jdk8使用okhttp發(fā)送http2請求

    本文主要用于工作記錄,在項目中遇到了就記錄一下 在早期,原生的JDK8是不支持HTTP/2協(xié)議的,所以,要想使用這個特性,需要有web服務(wù)器和應(yīng)用環(huán)境的支持, 例如:在VM中增加 -Xbootclasspath/p:/Users/a1234/Downloads/alpn-boot-8.1.11.v20170118.jar 來配合使用 但是從8u252開始,ALPN層已經(jīng)從

    2024年02月14日
    瀏覽(22)
  • 如何通過idea使用JDK8.0創(chuàng)建Spring項目

    如何通過idea使用JDK8.0創(chuàng)建Spring項目

    ? ? ? ? 目前 IDEA 進(jìn)行了優(yōu)化,所以我們在創(chuàng)建 Spring 項目時會發(fā)現(xiàn),以及不能選擇通過 JDK8.0 創(chuàng)建了,這是因?yàn)楣俜揭呀?jīng)不再提供 JDK8.0 創(chuàng)建 Spring 項目,我們可以通過修改創(chuàng)建 Spring 項目的路徑來解決該問題 ? ? ? ? 在創(chuàng)建 Spring 項目的頁面,修改 Server URL 為?https://start.a

    2024年01月22日
    瀏覽(41)
  • 關(guān)于使用jdk8自帶的日期類getDayOfWeek()的詳細(xì)解釋

    關(guān)于使用jdk8自帶的日期類getDayOfWeek()的詳細(xì)解釋

    我們會發(fā)現(xiàn)getDayOfWeek()這個函數(shù)和其他自帶函數(shù)不一樣 直接寫會報錯 但是如果我們將他變成getDayOfWeek().getValue() 又能夠正常運(yùn)行,我們這次就來看看是為什么 我們進(jìn)入getDayOfWeek()的源碼中查看 我們可以發(fā)現(xiàn)他給我們返回的是一個DayOfWeek對象類型數(shù)據(jù) 那我們可不可以把上一個代

    2024年01月25日
    瀏覽(13)
  • 使用IDEA創(chuàng)建使用 JDK8 的 2.x.x 版本的 Spring Boot 項目以及 Spring Boot 項目如何修改JDK版本

    使用IDEA創(chuàng)建使用 JDK8 的 2.x.x 版本的 Spring Boot 項目以及 Spring Boot 項目如何修改JDK版本

    目錄 一、在阿里云上官網(wǎng)上創(chuàng)建項目 二、將 IDEA 中創(chuàng)建項目的源地址修改為阿里云官網(wǎng) 三、創(chuàng)建 3.x.x 的項目之后修改配置降低至 2.7.x 版本和使用 JDK8(修改 Spring Boot 的 JDK 版本同理) 從上面的 Spring Boot 官網(wǎng)的截圖中可以發(fā)現(xiàn),自 2023-11-24 之后,最后一個支持使用 JDK8 的

    2024年01月21日
    瀏覽(26)
  • 解決selenium升級到版本 4.16后出現(xiàn)的問題: org/openqa/selenium/WebDriver 編譯環(huán)境是55.0(jdk11),而運(yùn)行環(huán)境為52.0( jdk8 )

    解決selenium升級到版本 4.16后出現(xiàn)的問題: org/openqa/selenium/WebDriver 編譯環(huán)境是55.0(jdk11),而運(yùn)行環(huán)境為52.0( jdk8 )

    最近升級了selenium到版本 4.16.1,? 持續(xù)集成測試,執(zhí)行mvn test時遇到問題如下 java.lang.UnsupportedClassVersionError: org/openqa/selenium/WebDriver has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0 提示信息翻譯:

    2024年02月03日
    瀏覽(42)
  • jdk8對象列表使用stream流基于某個字段(或某些條件)實(shí)現(xiàn)去重

    jdk8對象列表使用stream流基于某個字段(或某些條件)實(shí)現(xiàn)去重

    直接上代碼:(實(shí)現(xiàn)了去重加排序的效果) comparing(比較器)定義的就是去重的所使用的字段,可以使用匿名內(nèi)部類來寫更復(fù)雜的去重邏輯。 我們看看單參數(shù)的比較器方法實(shí)現(xiàn);如下,可以發(fā)現(xiàn)內(nèi)部實(shí)際調(diào)用效果類似于(a,b)-a.getXXX.conpareTo(b.getXXX)。 因?yàn)镕unction.apply(field)實(shí)際上

    2024年02月11日
    瀏覽(96)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包