义乌制作网站要多少钱,dw网站建设的基本流程,微信小程序注册后怎么使用,英文响应式网站建设文章目录K8s 环境中的 JVM 调优实战Request/Limit平衡、LivenessProbe假死与Sidecar内存管理深度解析#x1f4cb; 目录#x1f3af; 一、K8s环境中JVM调优的独特挑战#x1f4a1; K8s与物理机环境的差异#x1f3af; K8s感知的JVM配置⚖️ 二、Request/Limit平衡的艺术 目录 一、K8s环境中JVM调优的独特挑战 K8s与物理机环境的差异 K8s感知的JVM配置⚖️ 二、Request/Limit平衡的艺术 Request vs Limit策略 Request/Limit智能配置 三、LivenessProbe假死问题深度解析 假死问题的根源 智能探针配置方案 四、Sidecar内存开销管理 Sidecar内存影响分析 五、多容器协同优化策略 多容器资源协同 六、生产环境调优案例 电商系统K8s调优案例 七、K8s JVM调优最佳实践 调优黄金法则 自动化调优方案K8s 环境中的 JVM 调优实战Request/Limit平衡、LivenessProbe假死与Sidecar内存管理深度解析 目录 一、K8s环境中JVM调优的独特挑战⚖️ 二、Request/Limit平衡的艺术 三、LivenessProbe假死问题深度解析 四、Sidecar内存开销管理 五、多容器协同优化策略 六、生产环境调优案例 七、K8s JVM调优最佳实践 一、K8s环境中JVM调优的独特挑战 K8s与物理机环境的差异K8s环境中JVM调优的三大挑战K8s JVM调优挑战资源动态性网络复杂性存储抽象化CPU Burst限制内存弹性伸缩资源竞争隔离服务发现延迟网络策略影响Ingress/Egress开销持久卷性能本地存储限制IOPS限制 K8s感知的JVM配置/** * K8s环境JVM配置管理器 * 自动感知K8s环境的智能配置 */ComponentSlf4jpublicclassKubernetesAwareJVMConfig{/** * K8s JVM配置 */DataBuilderpublicstaticclassK8sJVMConfig{privatefinalStringnamespace;// 命名空间privatefinalStringpodName;// Pod名称privatefinalMapString,Stringlabels;// Pod标签privatefinalResourceRequirementsresources;// 资源需求privatefinalbooleansidecarEnabled;// 是否有SidecarprivatefinalProbeConfiglivenessProbe;// 存活探针配置privatefinalProbeConfigreadinessProbe;// 就绪探针配置/** * 自动检测K8s环境 */publicstaticK8sJVMConfigautoDetect(){K8sJVMConfig.K8sJVMConfigBuilderbuilderK8sJVMConfig.builder();// 从环境变量读取K8s元数据StringnamespaceSystem.getenv(POD_NAMESPACE);StringpodNameSystem.getenv(POD_NAME);if(namespace!nullpodName!null){builder.namespace(namespace);builder.podName(podName);log.info(检测到K8s环境: namespace{}, pod{},namespace,podName);// 自动检测资源限制ResourceRequirementsresourcesdetectResourceRequirements();builder.resources(resources);// 检测SidecarbooleanhasSidecardetectSidecar();builder.sidecarEnabled(hasSidecar);// 生成智能配置builder.livenessProbe(generateSmartLivenessProbe(resources));builder.readinessProbe(generateSmartReadinessProbe(resources));}else{log.warn(未检测到K8s环境使用默认配置);}returnbuilder.build();}/** * 生成JVM启动参数 */publicListStringgenerateJVMOptions(){ListStringoptionsnewArrayList();// 基础配置options.add(-XX:UseContainerSupport);options.add(-XX:AlwaysPreTouch);// 内存配置if(resources!nullresources.getLimits()!null){longmemoryLimitresources.getLimits().get(memory).getAmount();doublememoryPercentagecalculateMemoryPercentage();options.add(-XX:MaxRAMPercentagememoryPercentage);options.add(-XX:InitialRAMPercentagememoryPercentage);options.add(-XX:MaxMetaspaceSizecalculateMetaspaceSize(memoryLimit));}// GC配置options.add(-XX:UseG1GC);options.add(-XX:MaxGCPauseMillis100);options.add(-XX:ParallelRefProcEnabled);// 监控配置options.add(-XX:NativeMemoryTrackingsummary);options.add(-XX:HeapDumpOnOutOfMemoryError);options.add(-XX:HeapDumpPath/tmp/heapdump.hprof);// K8s感知优化options.add(-XX:PerfDisableSharedMem);// 减少/proc/sys/kernel/perf_event_paranoid影响options.add(-XX:PreserveFramePointer);// 改进性能分析returnoptions;}/** * 计算内存百分比 */privatedoublecalculateMemoryPercentage(){if(sidecarEnabled){// 如果有Sidecar为Sidecar预留内存return65.0;// 使用65%的内存}else{return75.0;// 使用75%的内存}}}/** * K8s资源检测器 */ComponentSlj4publicclassKubernetesResourceDetector{privatefinalKubernetesClientk8sClient;privatefinalCGroupReadercgroupReader;/** * 检测Pod资源限制 */publicclassPodResourceDetector{/** * 检测Pod的资源限制 */publicResourceRequirementsdetectResourceRequirements(){try{// 方法1: 从cgroup读取CGroupResourcescgroupResourcescgroupReader.readResources();// 方法2: 从K8s API读取if(k8sClient!null){StringnamespaceSystem.getenv(POD_NAMESPACE);StringpodNameSystem.getenv(POD_NAME);if(namespace!nullpodName!null){Podpodk8sClient.pods().inNamespace(namespace).withName(podName).get();if(pod!null){returnpod.getSpec().getContainers().get(0).getResources();}}}// 方法3: 从环境变量读取StringmemoryLimitSystem.getenv(CONTAINER_MEMORY_LIMIT);StringcpuLimitSystem.getenv(CONTAINER_CPU_LIMIT);if(memoryLimit!null||cpuLimit!null){ResourceRequirementsrequirementsnewResourceRequirements();MapString,QuantitylimitsnewHashMap();if(memoryLimit!null){limits.put(memory,newQuantity(memoryLimit));}if(cpuLimit!null){limits.put(cpu,newQuantity(cpuLimit));}requirements.setLimits(limits);returnrequirements;}}catch(Exceptione){log.warn(无法检测资源限制,e);}returnnull;}}}}⚖️ 二、Request/Limit平衡的艺术 Request vs Limit策略Request/Limit平衡决策矩阵资源策略应用类型关键业务应用批处理应用数据服务应用Request80% Limit保证服务质量优先调度Request50% Limit容忍调度延迟可抢占资源Request60% Limit平衡性能成本弹性伸缩CPU: 请求2核, 限制2.5核内存: 请求2GB, 限制2.5GBCPU: 请求1核, 限制4核内存: 请求2GB, 限制4GBCPU: 请求2核, 限制4核内存: 请求4GB, 限制6GB Request/Limit智能配置# Kubernetes资源配置最佳实践apiVersion:apps/v1kind:Deploymentmetadata:name:java-appspec:replicas:3selector:matchLabels:app:java-apptemplate:metadata:labels:app:java-appspec:# 拓扑分布约束topologySpreadConstraints:-maxSkew:1topologyKey:kubernetes.io/hostnamewhenUnsatisfiable:ScheduleAnywaylabelSelector:matchLabels:app:java-appcontainers:-name:java-appimage:registry.example.com/java-app:1.0.0# 资源请求和限制resources:requests:memory:1536Mi# 1.5GBcpu:1000m# 1核ephemeral-storage:5Gilimits:memory:2048Mi# 2GBcpu:2000m# 2核ephemeral-storage:10Gihugepages-2Mi:1Gi# 大页内存# 环境变量env:-name:JAVA_TOOL_OPTIONSvalue:-XX:MaxRAMPercentage70.0 -XX:InitialRAMPercentage70.0 -XX:UseContainerSupport -XX:UseG1GC -XX:MaxGCPauseMillis100 -XX:ParallelGCThreads2 -XX:ConcGCThreads1 -XX:PerfDisableSharedMem# 安全上下文securityContext:allowPrivilegeEscalation:falserunAsNonRoot:truerunAsUser:1000capabilities:drop:-ALLseccompProfile:type:RuntimeDefault# 卷挂载volumeMounts:-name:heap-dumpmountPath:/tmp/heapdump-name:gc-logsmountPath:/logs# 端口ports:-containerPort:8080name:httpprotocol:TCP# 存活探针livenessProbe:httpGet:path:/actuator/health/livenessport:8080httpHeaders:-name:Custom-Headervalue:liveness-checkinitialDelaySeconds:60periodSeconds:10timeoutSeconds:5successThreshold:1failureThreshold:3# 就绪探针readinessProbe:httpGet:path:/actuator/health/readinessport:8080httpHeaders:-name:Custom-Headervalue:readiness-checkinitialDelaySeconds:30periodSeconds:5timeoutSeconds:3successThreshold:1failureThreshold:3# 启动探针startupProbe:httpGet:path:/actuator/health/startupport:8080initialDelaySeconds:5periodSeconds:5timeoutSeconds:3successThreshold:1failureThreshold:30# 最多等待150秒# 生命周期钩子lifecycle:preStop:exec:command:-/bin/sh--c-|echo 开始优雅关闭 sleep 30 echo 关闭完成# 资源预留resources:requests:memory:1536Micpu:1000mlimits:memory:2048Micpu:2000m# 初始化容器initContainers:-name:init-configimage:busybox:1.28command:[sh,-c,echo 初始化配置完成]resources:requests:memory:64Micpu:100mlimits:memory:128Micpu:200m# 卷volumes:-name:heap-dumpemptyDir:{}-name:gc-logsemptyDir:{}# 亲和性affinity:podAntiAffinity:preferredDuringSchedulingIgnoredDuringExecution:-weight:100podAffinityTerm:labelSelector:matchExpressions:-key:appoperator:Invalues:-java-apptopologyKey:kubernetes.io/hostname 三、LivenessProbe假死问题深度解析 假死问题的根源LivenessProbe假死问题诊断流程LivenessProbe失败问题分类应用真死应用假死JVM崩溃OOM Killer容器退出线程池耗尽死锁/活锁GC停顿过长网络隔离重启策略优化线程池死锁检测GC优化网络策略调整 智能探针配置方案/** * 智能探针管理器 * 解决LivenessProbe假死问题 */ComponentSlf4jpublicclassSmartProbeManager{/** * 探针配置 */DataBuilderpublicstaticclassProbeConfig{privatefinalProbeTypetype;// 探针类型privatefinalStringpath;// 检查路径privatefinalintport;// 端口privatefinalintinitialDelay;// 初始延迟privatefinalintperiod;// 检查周期privatefinalinttimeout;// 超时时间privatefinalintsuccessThreshold;// 成功阈值privatefinalintfailureThreshold;// 失败阈值privatefinalbooleanadaptive;// 是否自适应privatefinalProbeFallbackfallback;// 降级策略/** * 智能存活探针配置 */publicstaticProbeConfigsmartLivenessProbe(){returnProbeConfig.builder().type(ProbeType.HTTP_GET).path(/actuator/health/liveness).port(8080).initialDelay(60)// 60秒初始延迟.period(10)// 10秒检查一次.timeout(5)// 5秒超时.successThreshold(1).failureThreshold(3)// 3次失败后重启.adaptive(true)// 启用自适应.fallback(ProbeFallback.EXEC_COMMAND)// 降级为exec命令.build();}/** * 生成K8s探针配置 */publicio.fabric8.kubernetes.api.model.ProbetoK8sProbe(){io.fabric8.kubernetes.api.model.Probeprobenewio.fabric8.kubernetes.api.model.Probe();// HTTP GET探针HTTPGetActionhttpGetnewHTTPGetAction();httpGet.setPath(this.path);httpGet.setPort(newIntOrString(this.port));probe.setHttpGet(httpGet);probe.setInitialDelaySeconds(this.initialDelay);probe.setPeriodSeconds(this.period);probe.setTimeoutSeconds(this.timeout);probe.setSuccessThreshold(this.successThreshold);probe.setFailureThreshold(this.failureThreshold);returnprobe;}}/** * 自适应探针调整器 */ComponentSlf4jpublicclassAdaptiveProbeAdjuster{privatefinalSystemMonitorsystemMonitor;privatefinalGCMonitorgcMonitor;/** * 基于系统状态调整探针 */publicclassProbeStateBasedAdjustment{Scheduled(fixedRate30000)// 每30秒检查一次publicvoidadjustProbeBasedOnState(){SystemMetricsmetricssystemMonitor.getCurrentMetrics();GCMetricsgcMetricsgcMonitor.getRecentMetrics();// 如果系统负载高调整探针参数if(metrics.getCpuUsage()0.8||metrics.getMemoryUsage()0.8){adjustProbeForHighLoad();}// 如果GC频繁调整探针if(gcMetrics.getYoungGCFrequency()20||gcMetrics.getFullGCCount()0){adjustProbeForGC();}}/** * 高负载时的探针调整 */privatevoidadjustProbeForHighLoad(){// 增加超时时间updateProbeTimeout(10);// 增加到10秒// 增加检查周期updateProbePeriod(15);// 增加到15秒log.info(高负载状态调整探针参数: timeout10s, period15s);}/** * GC时的探针调整 */privatevoidadjustProbeForGC(){// 延长检查周期避免在GC时检查updateProbePeriod(20);// 增加到20秒// 增加失败阈值updateFailureThreshold(5);// 增加到5次log.info(GC频繁调整探针参数: period20s, failureThreshold5);}}/** * 探针降级策略 */ComponentSlj4publicclassProbeFallbackStrategy{/** * HTTP探针失败时的降级策略 */publicclassHTTPProbeFallback{/** * 执行降级检查 */publicbooleanexecuteFallbackCheck(){// 策略1: 检查进程是否存在if(isProcessAlive()){returntrue;}// 策略2: 检查端口是否监听if(isPortListening(8080)){returntrue;}// 策略3: 检查JVM内部状态if(checkJVMInternalState()){returntrue;}returnfalse;}/** * 检查JVM内部状态 */privatebooleancheckJVMInternalState(){try{// 检查线程状态ThreadMXBeanthreadBeanManagementFactory.getThreadMXBean();ThreadInfo[]threadsthreadBean.dumpAllThreads(false,false);// 如果有活跃线程认为JVM还活着longactiveThreadsArrays.stream(threads).filter(t-t.getThreadState()!Thread.State.TERMINATED).count();if(activeThreads0){log.info(JVM内部检查: 有{}个活跃线程,activeThreads);returntrue;}// 检查GC活动ListGarbageCollectorMXBeangcBeansManagementFactory.getGarbageCollectorMXBeans();longtotalGCCountgcBeans.stream().mapToLong(GarbageCollectorMXBean::getCollectionCount).sum();if(totalGCCount0){log.info(JVM内部检查: 有GC活动);returntrue;}}catch(Exceptione){log.warn(JVM内部检查失败,e);}returnfalse;}}}}} 四、Sidecar内存开销管理 Sidecar内存影响分析Sidecar对主容器内存的影响/** * Sidecar内存开销分析器 * 精确计算和管理Sidecar内存使用 */ComponentSlf4jpublicclassSidecarMemoryAnalyzer{/** * Sidecar内存分析 */DataBuilderpublicstaticclassSidecarMemoryAnalysis{privatefinalStringsidecarName;// Sidecar名称privatefinallongmemoryRequest;// 内存请求privatefinallongmemoryLimit;// 内存限制privatefinallongactualUsage;// 实际使用privatefinaldoubleusagePercentage;// 使用百分比privatefinalListMemoryComponentcomponents;// 内存组件privatefinalMemoryLeakRiskleakRisk;// 内存泄漏风险/** * 计算Sidecar内存压力 */publicMemoryPressurecalculateMemoryPressure(){MemoryPressurepressurenewMemoryPressure();doubleusageRatio(double)actualUsage/memoryLimit;pressure.setUsageRatio(usageRatio);if(usageRatio0.9){pressure.setLevel(PressureLevel.CRITICAL);pressure.setDescription(Sidecar内存使用超过90%限制);}elseif(usageRatio0.8){pressure.setLevel(PressureLevel.HIGH);pressure.setDescription(Sidecar内存使用超过80%限制);}elseif(usageRatio0.7){pressure.setLevel(PressureLevel.MEDIUM);pressure.setDescription(Sidecar内存使用超过70%限制);}else{pressure.setLevel(PressureLevel.LOW);}returnpressure;}}/** * Sidecar内存优化器 */ComponentSlj4publicclassSidecarMemoryOptimizer{privatefinalKubernetesClientk8sClient;privatefinalMemoryMonitormemoryMonitor;/** * Sidecar资源配置优化 */publicclassSidecarResourceOptimization{/** * 优化Sidecar资源配置 */publicResourceRequirementsoptimizeSidecarResources(StringsidecarType,PodMetricsmetrics){ResourceRequirementsresourcesnewResourceRequirements();MapString,QuantityrequestsnewHashMap();MapString,QuantitylimitsnewHashMap();switch(sidecarType){caseistio-proxy:// Istio代理优化配置requests.put(cpu,newQuantity(100m));requests.put(memory,newQuantity(128Mi));limits.put(cpu,newQuantity(2000m));// 突发到2核limits.put(memory,newQuantity(1024Mi));// 最大1GBbreak;caselinkerd-proxy:// Linkerd代理优化配置requests.put(cpu,newQuantity(50m));requests.put(memory,newQuantity(64Mi));limits.put(cpu,newQuantity(1000m));limits.put(memory,newQuantity(512Mi));break;casefluentd:// Fluentd日志收集优化requests.put(cpu,newQuantity(50m));requests.put(memory,newQuantity(100Mi));limits.put(cpu,newQuantity(500m));limits.put(memory,newQuantity(500Mi));break;caseenvoy:// Envoy代理优化requests.put(cpu,newQuantity(100m));requests.put(memory,newQuantity(256Mi));limits.put(cpu,newQuantity(2000m));limits.put(memory,newQuantity(2048Mi));break;}resources.setRequests(requests);resources.setLimits(limits);returnresources;}}/** * Sidecar内存共享优化 */publicclassSidecarMemorySharing{/** * 配置共享内存优化 */publicPodSpecconfigureSharedMemory(PodSpecoriginalSpec){PodSpecspecoriginalSpec;// 添加共享内存卷VolumesharedMemorynewVolume();sharedMemory.setName(dshm);sharedMemory.setEmptyDir(newEmptyDirVolumeSource());sharedMemory.getEmptyDir().setMedium(Memory);spec.getVolumes().add(sharedMemory);// 为所有容器挂载共享内存for(Containercontainer:spec.getContainers()){VolumeMountvolumeMountnewVolumeMount();volumeMount.setName(dshm);volumeMount.setMountPath(/dev/shm);container.getVolumeMounts().add(volumeMount);}returnspec;}}}} 五、多容器协同优化策略 多容器资源协同多容器Pod资源优化策略# 多容器Pod优化配置示例apiVersion:apps/v1kind:Deploymentmetadata:name:java-app-with-sidecarsspec:replicas:3selector:matchLabels:app:java-apptemplate:metadata:labels:app:java-appspec:# 优先级类priorityClassName:high-priority# 拓扑分布topologySpreadConstraints:-maxSkew:1topologyKey:topology.kubernetes.io/zonewhenUnsatisfiable:DoNotSchedulelabelSelector:matchLabels:app:java-appcontainers:# 主应用容器-name:java-appimage:registry.example.com/java-app:1.0.0resources:requests:memory:1536Micpu:1000mephemeral-storage:5Gilimits:memory:3072Mi# 3GBcpu:2000mephemeral-storage:10Gihugepages-2Mi:1Gi# 主容器JVM优化env:-name:JAVA_TOOL_OPTIONSvalue:-XX:MaxRAMPercentage60.0 -XX:InitialRAMPercentage60.0 -XX:UseContainerSupport -XX:UseG1GC -XX:MaxGCPauseMillis100 -XX:ParallelGCThreads2 -XX:ConcGCThreads1 -XX:ActiveProcessorCount2 -Dsidecar.enabledtrue# Sidecar容器-name:istio-proxyimage:docker.io/istio/proxyv2:1.15.0resources:requests:memory:128Micpu:100mlimits:memory:1024Micpu:2000m# 安全配置securityContext:allowPrivilegeEscalation:falsecapabilities:drop:-ALLreadOnlyRootFilesystem:truerunAsGroup:1337runAsNonRoot:truerunAsUser:1337env:-name:ISTIO_META_CPU_REQUESTvalueFrom:resourceFieldRef:containerName:istio-proxyresource:requests.cpu# 日志收集Sidecar-name:fluentdimage:fluent/fluentd:v1.14.0resources:requests:memory:100Micpu:50mlimits:memory:500Micpu:500m# 共享卷volumeMounts:-name:varlogmountPath:/var/log-name:fluentd-configmountPath:/fluentd/etc# 监控Sidecar-name:promtailimage:grafana/promtail:2.6.0resources:requests:memory:50Micpu:25mlimits:memory:256Micpu:250m# 初始化容器initContainers:-name:init-sysctlimage:busybox:1.28command:-/bin/sh--c-|sysctl -w net.core.somaxconn65535 sysctl -w net.ipv4.ip_local_port_range1024 65535securityContext:privileged:trueresources:requests:memory:32Micpu:10mlimits:memory:64Micpu:50m# 卷配置volumes:-name:varlogemptyDir:{}-name:fluentd-configconfigMap:name:fluentd-config-name:dshmemptyDir:medium:MemorysizeLimit:256Mi# Pod整体资源预算overhead:cpu:250mmemory:512Mi 六、生产环境调优案例 电商系统K8s调优案例优化前后对比数据指标优化前优化后提升幅度Pod重启频率15次/天1次/天93%P99延迟200ms50ms75%内存使用效率60%85%42%CPU使用效率45%70%56%启动时间45s12s73%探针假死8次/天0次/天100%Sidecar内存占用1.5GB800MB47%关键优化点✅资源请求优化resources:requests:memory:1.5Gi# 从2Gi优化到1.5Gicpu:1000m# 保持1核limits:memory:2.5Gi# 从4Gi优化到2.5Gicpu:2000m# 从4核优化到2核✅JVM参数优化-XX:MaxRAMPercentage70.0-XX:UseContainerSupport -XX:UseG1GC -XX:MaxGCPauseMillis100-XX:ParallelGCThreads2✅探针优化livenessProbe:httpGet:path:/actuator/health/livenessport:8080initialDelaySeconds:60periodSeconds:10timeoutSeconds:5failureThreshold:3startupProbe:httpGet:path:/actuator/health/startupport:8080failureThreshold:30periodSeconds:5✅Sidecar优化-name:istio-proxyresources:requests:memory:128Micpu:100mlimits:memory:512Mi# 从1Gi优化到512Micpu:1000m 七、K8s JVM调优最佳实践 调优黄金法则K8s JVM调优12条最佳实践✅容器感知始终启用-XX:UseContainerSupport✅内存百分比使用-XX:MaxRAMPercentage而非固定值✅合理请求Request设置为日常使用峰值的80%✅弹性限制Limit设置为Request的1.5-2倍✅探针分级使用Startup、Readiness、Liveness三级探针✅优雅关闭配置preStop钩子确保优雅关闭✅资源隔离为Sidecar预留足够资源✅拓扑分布使用topologySpreadConstraints分散风险✅安全加固配置securityContext限制权限✅监控集成集成Prometheus和监控告警✅混沌测试定期进行资源限制的混沌测试✅文档化所有调优决策和参数文档化 自动化调优方案/** * K8s JVM自动调优控制器 */ComponentSlj4publicclassKubernetesJVMAutoTuner{Scheduled(fixedRate300000)// 每5分钟检查一次publicvoidautoTuneJVM(){// 1. 收集当前指标PodMetricsmetricscollectPodMetrics();JVMMetricsjvmMetricscollectJVMMetrics();// 2. 分析优化空间TuningAnalysisanalysisanalyzeTuningPotential(metrics,jvmMetrics);// 3. 生成优化建议ListTuningRecommendationrecommendationsgenerateRecommendations(analysis);// 4. 应用优化applyRecommendations(recommendations);// 5. 记录调优历史recordTuningHistory(recommendations);}/** * 自动调整资源限制 */publicvoidautoScaleResources(){HorizontalPodAutoscalerhpak8sClient.autoscaling().v2().horizontalPodAutoscalers().inNamespace(namespace).withName(java-app-hpa).get();// 基于JVM指标调整HPAif(shouldScaleBasedOnJVMMetrics()){updateHPA(hpa);}}}洞察K8s环境中的JVM调优是艺术与科学的结合。它不仅需要对JVM内部机制有深入理解更需要掌握K8s的资源调度、服务发现、弹性伸缩等云原生能力。真正的专家不是简单地调整参数而是建立一个能够自我适应、自我修复的智能系统。记住在K8s中JVM不是一个孤立的进程而是一个生态系统中的智能参与者。如果觉得本文对你有帮助请点击 点赞 ⭐ 收藏 留言支持讨论话题你在K8s环境中调优JVM遇到过哪些挑战有哪些独特的K8s JVM调优经验分享如何设计自动化的JVM调优系统相关资源推荐 https://book.douban.com/subject/26902153/ https://github.com/kubernetes/kubernetes https://github.com/example/k8s-jvm-tuning