写点什么

Arthas mc(Memory Compiler/ 内存编译器 )

作者:刘大猫
  • 2025-05-06
    黑龙江
  • 本文字数:2173 字

    阅读完需:约 7 分钟


@[toc]

二、命令列表

2.2 class/classloader 相关命令

2.2.2 mc (Memory Compiler/内存编译器 )

提示:

Memory Compiler/内存编译器,编译.java文件生成.class

注意点1:mc 命令有可能失败。如果编译失败可以在本地编译好.class文件,再上传到服务器。具体参考retransform命令说明。

注意点2:编译生成.class文件之后,可以结合retransform命令实现热更新代码。


参数说明:



代码:


package com.hero.lte.ems.security.controller;
import com.hero.lte.ems.common.spring.SpringContextHolder;import com.hero.lte.ems.db.orm.mybatis.Page;import com.hero.lte.ems.security.config.Constants;import com.hero.lte.ems.security.entity.*;import com.hero.lte.ems.security.service.*;import com.hero.lte.ems.security.util.UUIDGennerator;import org.apache.shiro.SecurityUtils;import org.apache.shiro.cache.Cache;import org.apache.shiro.crypto.hash.Md5Hash;import org.apache.shiro.session.Session;import org.apache.shiro.session.mgt.DefaultSessionKey;import org.apache.shiro.session.mgt.SessionManager;import org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO;import org.apache.shiro.subject.Subject;import org.redisson.api.RMap;import org.redisson.api.RedissonClient;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RestController;
import java.io.Serializable;import java.time.Clock;import java.util.*;
@RestController@RequestMapping("/lte/ems/user/")public class AccountController {
@Autowired private IAccountService accountService; @Autowired private IRoleService roleService; @Autowired private IAuthService authService; @Autowired private IRemindService remindService; @Autowired private IStrategyService strategyService;
/** * 查询帐户分页列表 * @param account * @param pager * @return */ @RequestMapping(value = "query", method = RequestMethod.GET) public Page<Account> query(Account account, Page<Account> pager) { pager.setParam(account); return accountService.queryAccountPage(pager); }
复制代码

举例 1:可以通过-d 命令指定输出目录:mc -d /temporary/tmp /temporary/tmp/AccountController.java

基本用法:mc -d 输出路径 置顶路径下的类


[arthas@24056]$ mc -d /temporary/tmp /temporary/tmp/AccountController.java Memory compiler output:/temporary/tmp/com/hero/lte/ems/security/controller/AccountController.classAffect(row-cnt:1) cost in 2682 ms.[arthas@24056]$ 
复制代码


执行命令前效果



执行命令后效果,按照包名 com.hero.lte.ems.security.controller 创建.class 文件


举例 2:通过--classLoaderClass参数指定 ClassLoader

基本用法

mc --classLoaderClass 全包名类名 置顶路径下的类 -d 指定输出路径


$ mc --classLoaderClass org.springframework.boot.loader.LaunchedURLClassLoader /tmp/UserController.java -d /tmpMemory compiler output:/tmp/com/example/demo/arthas/user/UserController.classAffect(row-cnt:1) cost in 346 ms
复制代码

本人其他相关文章链接

1.Arthas 全攻略:让调试变得简单2.Arthas dashboard(当前系统的实时数据面板)3.Arthas thread(查看当前JVM的线程堆栈信息)4.Arthas jvm(查看当前JVM的信息)5.Arthas sysprop(查看和修改JVM的系统属性)6.Arthas sysenv(查看JVM的环境变量)7.Arthas vmoption(查看和修改 JVM里诊断相关的option)8.Arthas getstatic(查看类的静态属性 )9.Arthas heapdump(dump java heap, 类似 jmap 命令的 heap dump 功能)10.Arthas logger(查看 logger 信息,更新 logger level)11.Arthas mbean(查看 Mbean 的信息)12.Arthas memory(查看 JVM 内存信息)13.Arthas ognl(执行ognl表达式)14.Arthas perfcounter(查看当前 JVM 的 Perf Counter 信息)15.Arthas vmtool(从 jvm 里查询对象,执行 forceGc)16.Arthas jad(字节码文件反编译成源代码 )17.Arthas mc(Memory Compiler/内存编译器 )18.Arthas redefine(加载外部的.class文件,redefine到JVM里 )19.Arthas classloader (查看 classloader 的继承树,urls,类加载信息)20.Arthas sc(查看JVM已加载的类信息 )21.Arthas sm(查看已加载类的方法信息 )22.Arthas monitor(方法执行监控)23.Arthas stack (输出当前方法被调用的调用路径)24.Arthas trace (方法内部调用路径,并输出方法路径上的每个节点上耗时)25.Arthas tt(方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测)26.Arthas watch (方法执行数据观测)27.Arthas profiler(使用async-profiler对应用采样,生成火焰图)

用户头像

刘大猫

关注

还未添加个人签名 2022-08-23 加入

还未添加个人简介

评论

发布
暂无评论
Arthas mc(Memory Compiler/内存编译器 )_人工智能_刘大猫_InfoQ写作社区