最近在项目开发中遇到了一些问题,项目为多机部署,使用kibana收集日志,但并发大时使用日志定位比较麻烦,大量日志输出导致很难筛出指定请求的全部相关日志,以及下游服务调用对应的日志。因此计划对项目日志打印进行一些小改造,使用一个traceId跟踪请求的全部路径,前提是不修改原有的打印方式。 简单的解决思路 想要跟踪请求,第一个想到的就是当请求来时生成一个traceId放在ThreadLocal里,…
Leave a Comment分类: 编程-JAVA
快速开始 官方文档:https://arthas.aliyun.com/doc/ 快速启动arthas(使用和目标进程一致的用户启动,否则可能attach失败) 常用命令 dashboard 查看数据大屏,宏观的系统运行状况。 thread 查看线程状况。 thread -n 10:查看消耗CPU排名前十的线程栈。 thead -b: 找出阻塞其他线程的线程。 thread -i 1000: 控制…
Leave a Comment发现个宝 https://arthas.aliyun.com/zh-cn/ Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。
Leave a Comment参考资料: https://www.baeldung.com/java-instrumentation https://medium.com/@shehan.a.perera/using-a-java-agent-to-monitor-application-runtime-behavior-using-metrics-664eb95e971c https://www.jrebel.com/blo…
Leave a Comment有的时候,我们想知道我们的java哪些是阻塞的,如果我们用jstack命令进行线程栈快照,我们只能知晓当前时刻点的线程状态,但是线程什么时候创建的,什么时候销毁的,全然不知。 思路 我们可以使用操作系统的ps命令来观察系统线程的创建时间,将线程的id和jstack的线程栈关联,即可知道我们jvm的当前线程栈中某个线程是何时创建的。 操作 使用jstack -l pid > dump.log …
Leave a Comment关键词 ThreadPoolExecutor.CallerRunsPolicy() 起因 早晨上班不久后,突然系统告警,商品服务延迟特别大。 由于其他几个后端服务和商品服务的依赖关系特别大,导致其他服务接连奔溃。由于目前各个系统没有做服务降级,在依赖服务(商品服务)出现阻塞,延迟响应缓慢之后,自身服务也出现阻塞现象。 后端服务接连奔溃,前端业务系统马上感受到影响,逐个失能。 处理 马上导出线上应用…
1 Comment没有任何TCP API可以告诉您当前的连接状态。 isConnected()和isClosed()是告诉你套接字的当前状态。 和连接状态不是一样的东西。 isConnected()告诉你是否已连接此套接字。 你已经链接了因此它返回true。 isClosed()告诉你是否已关闭此套接字。 除非有,否则它返回false。 如果对方(peer)有序地关闭了连接 read()返回-1readLine()…
1 CommentRemote debug spring boot application with maven and IntelliJ 应用启动开启调试模式,接受远程调试链接 这个主要就是启用gentlib:jdwp,在jvm里面启动一个在线调试的协议端口(Enable the Java Debug Wire Protocol (JDWP) agent inside the JVM)。suspend这个参数如果…
Leave a Comment最近写个小项目,用到JPA框架,项目很简单,两张表一对多关系,写完发现总是会有在json的时候递归栈溢出的问题,开始也没多想,就在关系的属性上加了个@JsonIgnore的注解,暂且能用,项目写到后面,我就是要关联查询啊,这么玩怎么搞。 感觉是不是自己项目配置或者哪里用的不对,就搜了篇标准的JPA 一对多的例子来照抄: https://attacomsian.com/blog/spring-dat…
Leave a Comment