「这是我参与2022首次更文挑战的第8天,活动详情查看:2022首次更文挑战」
实时修改生产环境的日志级别
这个功能也很好用,通常,我们在日志中打印的日志级别一般是infor、warn、error级别的,debug日志一般看不到。那么出问题的时候,一些日志,在写代码的时候会被记录在debug日志中,而此时日志级别又很高。那么迫切需要调整日志级别。
这个功能很好用啊,我们可以将平时不经常打印出来的日志设置为debug级别。设置线上日志打印级别为info。当线上有问题的时候,可以将日志级别动态调整为debug。异常排查完,在修改回info。这对访问量特别大日志内容很多的项目比较有效,可以有效节省日志输出带来的开销。
第一步:使用logger命令查看日志级别
- 当前应用的日志级别是info
- 类加载的hash值是18b4aac2
我们定义一个接口,其源代码内容如下:
@PostMapping(value = "test")
public String test() {
log.debug("这是一条 debug 级别的日志");
log.info("这是一条 info 级别的日志");
log.error("这是一条 error 级别的日志");
log.warn("这是一条 warn 级别的日志");
return "完成";
}
可以调用接口,查看日志输出代码。
我们看到,日志输出的是info及以下的级别。
第二步:修改logger日志的级别
logger -c 18b4aac2 --name ROOT --level debug
修改完日志级别以后,输出日志为debug级别。
8. 查询jvm信息,并修改----当发生内存溢出时,可以手动设置打印堆日志到文件
通常查询jvm参数,使用的是Java自带的工具[jinfo 进程号]。arthas中通过vmoption获取jvm参数:
假设,我们要设置JVM出现OutOfMemoryError的时候,自动dump堆快照
vmoption HeapDumpOnOutOfMemoryError true
这时,如果发生堆内存溢出,会打印日志到文件
9. 监控函数耗时
trace 待监控方法的全类名 待监控的方法名
trace com.lxl.jvm.DeadLockTest generatorUser
- 通过圈起来的部分可以看到,接口的入口函数time总耗时371ms
- 其中getDataFromDb函数耗时200ms
- getDataFromRedis函数耗时100ms
- getDataFromOuter函数耗时50ms
- process函数耗时20ms
很明显,最慢的函数已经找到了,接下里就要去对代码进行进一步分析,然后再进行优化