Press "Enter" to skip to content

分类: 编程-JAVA

在Java项目中使用traceId跟踪请求全流程日志

最近在项目开发中遇到了一些问题,项目为多机部署,使用kibana收集日志,但并发大时使用日志定位比较麻烦,大量日志输出导致很难筛出指定请求的全部相关日志,以及下游服务调用对应的日志。因此计划对项目日志打印进行一些小改造,使用一个traceId跟踪请求的全部路径,前提是不修改原有的打印方式。 简单的解决思路 想要跟踪请求,第一个想到的就是当请求来时生成一个traceId放在ThreadLocal里,…

Leave a Comment

Arthas 使用技巧

快速开始 官方文档:https://arthas.aliyun.com/doc/ 快速启动arthas(使用和目标进程一致的用户启动,否则可能attach失败) 常用命令 dashboard 查看数据大屏,宏观的系统运行状况。 thread 查看线程状况。 thread -n 10:查看消耗CPU排名前十的线程栈。 thead -b: 找出阻塞其他线程的线程。 thread -i 1000: 控制…

Leave a Comment

java 查看线程开始执行时间

有的时候,我们想知道我们的java哪些是阻塞的,如果我们用jstack命令进行线程栈快照,我们只能知晓当前时刻点的线程状态,但是线程什么时候创建的,什么时候销毁的,全然不知。 思路 我们可以使用操作系统的ps命令来观察系统线程的创建时间,将线程的id和jstack的线程栈关联,即可知道我们jvm的当前线程栈中某个线程是何时创建的。 操作 使用jstack -l pid > dump.log …

Leave a Comment

记一次线上java生产事故(CallerRunsPolicy)

关键词 ThreadPoolExecutor.CallerRunsPolicy() 起因 早晨上班不久后,突然系统告警,商品服务延迟特别大。 由于其他几个后端服务和商品服务的依赖关系特别大,导致其他服务接连奔溃。由于目前各个系统没有做服务降级,在依赖服务(商品服务)出现阻塞,延迟响应缓慢之后,自身服务也出现阻塞现象。 后端服务接连奔溃,前端业务系统马上感受到影响,逐个失能。 处理 马上导出线上应用…

1 Comment

Java如何判断socket连接是否已经断开(Java socket API: How to tell if a connection has been closed?)

没有任何TCP API可以告诉您当前的连接状态。 isConnected()和isClosed()是告诉你套接字的当前状态。 和连接状态不是一样的东西。 isConnected()告诉你是否已连接此套接字。 你已经链接了因此它返回true。 isClosed()告诉你是否已关闭此套接字。 除非有,否则它返回false。 如果对方(peer)有序地关闭了连接 read()返回-1readLine()…

1 Comment

Lombok, Hibernate, and ‘StackOverflowError: null’ Exception

最近写个小项目,用到JPA框架,项目很简单,两张表一对多关系,写完发现总是会有在json的时候递归栈溢出的问题,开始也没多想,就在关系的属性上加了个@JsonIgnore的注解,暂且能用,项目写到后面,我就是要关联查询啊,这么玩怎么搞。 感觉是不是自己项目配置或者哪里用的不对,就搜了篇标准的JPA 一对多的例子来照抄: https://attacomsian.com/blog/spring-dat…

Leave a Comment