[alibaba/arthas]Arthas 如何批量dump指定classloader中加载的所有class

2025-11-10 267 views
7
[x] 我已经在 issues 里搜索,没有重复的issue。 环境信息 arthas-boot.jar 或者 as.sh 的版本: 3.5.6 Arthas 版本: 3.5.6 操作系统版本: Windows 10 目标进程的JVM版本: JDK8u20 执行arthas-boot的版本: 3.5.6 重现问题的步骤 启动weblogic 附加到weblogic进程 根据制定classloader dump符合正则表达式约束的所有类 期望的结果

dump出被这个classloader加载的所有的classes文件

What do you expected from the above steps?

实际运行的结果

实际运行结果,最好有详细的日志,异常栈。尽量贴文本。 weblogic.diagnostics.debug.DebugBean weblogic.diagnostics.watch.WatchConfiguration$WatchExpressionBean weblogic.diagnostics.descriptor.WLDFHarvestedTypeBeanImpl$Helper weblogic.diagnostics.descriptor.WLDFSNMPNotificationBeanImpl$Helper weblogic.diagnostics.accessor.DiagnosticAccessRuntime weblogic.diagnostics.harvester.internal.HarvesterRuntimeMBeanImpl weblogic.diagnostics.watch.WatchNotActiveAlarmException weblogic.diagnostics.descriptor.validation.WatchNotificationValidators weblogic.diagnostics.instrumentation.ScopeAlreadyExistsException weblogic.diagnostics.type.DiagnosticRuntimeException weblogic.diagnostics.descriptor.WLDFWatchBean weblogic.diagnostics.descriptor.WLDFThreadDumpActionBeanImpl weblogic.diagnostics.descriptor.WLDFImageNotificationBeanImpl weblogic.diagnostics.watch.JMXNotificationListener$DeprecatedNotificationCusto mizer weblogic.diagnostics.snmp.server.SNMPAgentDeploymentService weblogic.diagnostics.instrumentation.action.DisplayArgumentsAction weblogic.diagnostics.instrumentation.DiagnosticMonitorControl weblogic.diagnostics.accessor.runtime.WlstoreArchiveRuntimeMBean weblogic.diagnostics.image.ImageAlreadyCapturedException weblogic.diagnostics.query.VariableResolver weblogic.diagnostics.instrumentation.engine.base.MethodInfo weblogic.diagnostics.snmp.agent.SNMPV3Agent weblogic.diagnostics.accessor.WLSAccessorSecurityProviderImpl weblogic.diagnostics.accessor.WLSAccessorConfigurationProviderImpl$1 weblogic.diagnostics.instrumentation.AroundDiagnosticAction weblogic.diagnostics.descriptor.WLDFPropertyBean weblogic.diagnostics.instrumentation.engine.base.PointcutSpecification weblogic.diagnostics.instrumentation.gathering.JFRHelper$Factory weblogic.diagnostics.descriptor.BeanInfoFactory weblogic.diagnostics.lifecycle.DiagnosticComponentLifecycleException weblogic.diagnostics.lifecycle.AccessorLifecycleImpl weblogic.diagnostics.watch.WatchNotificationListenerCommon weblogic.diagnostics.watch.NotificationNotFoundException weblogic.diagnostics.context.DiagnosticContextConstants weblogic.diagnostics.collections.IteratorCollector weblogic.diagnostics.runtimecontrol.internal.WatchManagerRuntimeMBeanImpl weblogic.diagnostics.instrumentation.JoinPoint weblogic.diagnostics.instrumentation.InstrumentationImageSource weblogic.diagnostics.instrumentation.engine.base.PointcutExpression weblogic.diagnostics.module.WLDFToolsExtensionFactory weblogic.diagnostics.metrics.WLSClusterRuntimeMetricSource weblogic.diagnostics.runtimecontrol.BuiltinSRDescriptorBeanHolder weblogic.diagnostics.instrumentation.engine.MonitorSpecification weblogic.diagnostics.debug.DebugScopeUtil weblogic.diagnostics.type.DiagnosticException weblogic.diagnostics.descriptor.WLDFBean weblogic.diagnostics.descriptor.WLDFScaleUpActionBeanImpl weblogic.diagnostics.descriptor.WLDFHarvestedTypeBeanImplBeanInfo weblogic.diagnostics.harvester.HarvesterException$AmbiguousTypeName weblogic.diagnostics.descriptor.WLDFScaleUpActionBeanImplBeanInfo weblogic.diagnostics.descriptor.WLDFSNMPNotificationBeanImpl weblogic.diagnostics.harvester.HarvesterException$HarvestableTypesNotFoundExce ption weblogic.diagnostics.descriptor.WLDFJMSNotificationBeanImpl$Helper weblogic.diagnostics.descriptor.WLDFEncryptedPropertyBean weblogic.diagnostics.archive.EditableDataArchive

Affect(row-cnt:0) cost in 390 ms. Found more than 50 class for: weblogic.diagnostics., Please Try to specify the classloader with the -c option, or try to use --limit option. [arthas@8812]$ dump -c 59717824 weblogic.diagnostics.

回答

0

默认最多50个,按提示增加limit配置。

5

默认最多50个,按提示增加limit配置。

你好,这50个classes文件并没有落地到文件夹里,只是打印输出了一下,并没有真的dump出来。

7

默认最多50个,按提示增加limit配置。

你好,这50个classes文件并没有落地到文件夹里,只是打印输出了一下,并没有真的dump出来。

这个逻辑是:超出了限制,所以打印提示。 并不是参数超出了限制,把限制内的事情做完。

7

你好,可是在对应目录下并没有classes文件打印出来

8

你好,可是在对应目录下并没有classes文件打印出来

0

同样遇到了这个问题,是不支持批量dump对应的class吗

7

+1,同样遇到这个问题,dump 默认限制 50,增加limit可能会导致进程退出。

[arthas@94842]$ help dump USAGE: dump [--classLoaderClass ] [-c ] [-d ] [-h] [-l ] [-E] class-pattern

SUMMARY: Dump class byte array from JVM

EXAMPLES: dump java.lang.String dump -d /tmp/output java.lang.String dump org/apache/commons/lang/StringUtils dump *StringUtils dump -E org\.apache\.commons\.lang\.StringUtils

WIKI: https://arthas.aliyun.com/doc/dump

OPTIONS: --classLoaderClass The class name of the special class's classLoader. -c, --code The hash code of the special class's classLoader -d, --directory Sets the destination directory for class files -h, --help this help -l, --limit The limit of dump classes size, default value is 50 -E, --regex Enable regular expression to match (wildcard matching by default)

Class name pattern, use either '.' or '/' as separator