常见问题排查
库昊天
这个作者很懒,什么都没留下…
展开
-
Content type 'application/json;charset=UTF-8' not supported
基础 SpringBoot接受到http请求后,会根据content-type来判断请求的数据格式,进而利用HttpMessageConverter将数据解析成特定的类型。对应JSON格式的数据,SpringBoot默认使用jackson进行数据的序列化/反序列化;可能原因原因1:缺少jackson相关的jar包<dependency> <groupId>...原创 2020-03-11 21:57:53 · 10675 阅读 · 0 评论 -
前端Long型数据精度丢失问题
现象 后端返回long型数据,但是前端展示时数据不一致。比如,后端返回的数据是1475797674679549851,但前端显示出来却成了1475797674679550000,后面几位全变成了0,精度丢失了。原因 Java long类型的的数字超出了Javascript的处理范围;解决办法 后端将long类型数据转为字符串返回给前端;实操全局更改spring.jackson...原创 2020-03-10 14:25:09 · 924 阅读 · 0 评论 -
线上问题排查思路总览
原创 2019-12-19 14:40:17 · 271 阅读 · 0 评论 -
应用启动FGC频繁问题排查
现象 应用刚启动的几分钟内固定的发生3次FGC,之后平稳不再GC;GC日志分析 从GC日志可以看出,Metaspace容量达到上限分别触发了一次YGC和FGC,而且Metaspace容量的容量在变大这说明Metaspace容量在不断扩容,这说明Metaspace容量设置过小导致应用启动时发生了扩容,查看JVM参数发现没有显式指定Metaspace容量,默认为20M;GCeasy可视化...原创 2019-01-31 16:33:16 · 1213 阅读 · 0 评论 -
NoClassDefFoundError常见原因
常见原因没有引入jar包;jar包冲突;pom中增加依赖后classpath没有被更新;maven依赖的scope设置不合理;IDEA maven依赖scope为provided报NoClassDefFoundError现象 eclipse中正常运行,IDEA中运行报错:Exception in thread "main" java.lang.NoClassDefFoundE...原创 2019-02-13 19:21:23 · 2393 阅读 · 0 评论 -
磁盘空间占满问题排查
排查步骤Step1: 查看磁盘使用情况及挂载目录 通过df命令查看各磁盘使用情况,以及其挂载的目录;df -hStep2: 查看目录下子目录及文件大小 通过du命令确定当前挂载目录下的各个子目录及文件大小,并且对其大小进行排序;du -h --max-depth=1 | sort -hStep3: 重复上一步不断缩小范围直至确定目录及文件参考:http://www....原创 2019-03-19 18:17:43 · 519 阅读 · 0 评论 -
Broken pipe问题分析
现象 应用程序与HiveServer2建立了连接池,用户在使用应用服务时,后端出现Broken pipe的异常堆栈:[ERROR][2019-03-29T15:19:30.599+0800][AdhocHiveSQLHandler.java:57] _undef||traceid=645949405c9dc6ff1aca0f0905f64c02||spanid=081006710e526dd...原创 2019-03-30 11:16:00 · 6210 阅读 · 0 评论 -
跨域请求及解决方案
跨域请求 跨域请求是指当前发起请求的域与该请求指向的资源所在的域不一样,只有当协议+域名+端口三者均相同时才认为是同域。例如,aaa.com 的网站发起一个URL为bbb.com/pay/purchase 的 Ajax 请求,该请求即为跨域请求;存在问题 跨域请求可能导致CSRF攻击,因此出于安全方面的考虑,浏览器通常会对跨域请求进行限制;解决方案方案1: JSONP(废弃) ...原创 2019-04-02 20:07:48 · 333 阅读 · 0 评论 -
数据库相关各种超时时间
事务超时时间Transaction Timeout 事务超时时间规定了事务执行时间的上限,通常包含两大部分:SQL执行时间,以及业务处理时间,即Transaction timeout = Statement Timeout * N(所有SQL执行总时间) + 业务处理时间;@Transactional(timeout = 3) 单位秒 事务超时的报错信息:org.springframe...原创 2019-04-27 19:58:26 · 8644 阅读 · 0 评论 -
IO问题排查思路及工具
影响 IO负载高会导致IO处理时间变长,IO等待队列变长,系统负载变高;IO负载高排查思路查看系统IO情况,iostat命令;查看各进程IO使用情况,iotop/pidstat命令;查看某个进程文件读写情况,ioprofile/lsof + strace;查看系统IO情况 说明:iostat和top命令中的iowait并不能等于IO负载情况,只是反映了CPU等待IO时间占用C...原创 2019-05-05 18:52:30 · 4857 阅读 · 0 评论 -
TCP半连接队列和全连接队列
基本介绍半连接队列(syn queue)作用:TCP 三次握手中存储处于SYN_RECV状态的连接;最大长度:max(64, /proc/sys/net/ipv4/tcp_max_syn_backlog),syncookies = 0 时起效,syncookies = 1时将被忽略;全连接队列(accept queue)作用:TCP 三次握手中存储处于ESTABLISHED状态的...原创 2019-05-28 18:21:16 · 3889 阅读 · 0 评论 -
读超时小于系统处理时间问题思考
问题描述 系统A调用系统B的服务,系统A设置了超时上限t1(读超时,或者熔断超时等),系统B服务处理时间为t2。当t1 < t2时,系统A会抛出超时异常,系统B可能处理成功也可能失败,但是系统A无法感知,如下图所示:...原创 2019-07-01 09:32:53 · 268 阅读 · 0 评论 -
排查问题常用工具
jstack分析工具fastthread:能够在线生成图形化的分析报告,链接:https://fastthread.io/index.jsp比较粗糙的在线分析工具:https://spotify.github.io/threaddump-analyzer/gc分析工具gceasy:阿三哥的一个在线分析产品,很不错: https://gceasy.io/index.jsp#banner...原创 2019-01-17 21:10:50 · 260 阅读 · 0 评论 -
Fastjson默认构造函数使用注意
注意点1: 低版本中,如果JavaBean中没有默认构造函数(显式或默认),运行时将直接抛出 “default constructor not found” 的异常信息,如下:测试时使用版本信息: &lt;dependency&gt; &lt;groupId&gt;com.alibaba&lt;/groupId&gt; &lt;artifactId&g原创 2018-11-04 10:25:47 · 5156 阅读 · 0 评论 -
CPU使用率 VS Load
定义CPU使用率:一段时间内,CPU执行任务的时间与总时间的比率,从时间维度反映CPU资源使用情况; Load:一段时间内,CPU正在执行的任务以及处于“uninterruptable sleep”状态(IO阻塞导致)任务数量的平均值; The load average is calculated as the average number of runnable or running tas原创 2017-10-24 20:55:03 · 360 阅读 · 0 评论 -
系统假死问题排查
系统假死定义 应用进程存在,但是无法正常提供服务(请求没有响应,或者响应超时)。系统假死原因 主要分为两大类:连接无法建立、请求无法处理,如下图所示: 连接数达到上限查看单个进程能打开的最大句柄数,如果太小需要进行修改; 查看:ulimit -a 修改:vi /etc/security/limits.conf统计各状态的连接数量 netstat -n | awk '/^tcp/ {+原创 2018-01-16 10:10:43 · 2347 阅读 · 0 评论 -
TCP连接大量TIME_WAIT状态问题排查
TIME_WAIT连接过多TIME_WAIT的产生 TIMEWAIT是主动关闭的一方,在使用FIN|ACK|FIN|ACK四分组正常关闭TCP连接时产生的。TIMEWAIT状态本身和应用层的客户端或者服务器是没有关系的。服务器在处理客户端请求的时候,如果你的程序设计为服务器主动关闭,那么你才有可能需要关注这个TIMEWAIT状态过多的问题。如果你的服务器设计为被动关闭,那么你首先要关原创 2018-01-17 19:14:41 · 3303 阅读 · 0 评论 -
TCP连接大量CLOSE_WAIT状态问题排查
CLOSE_WAIT产生原因 close_wait是被动关闭连接是形成的,根据TCP状态机,服务器端收到客户端发送的FIN,TCP协议栈会自动发送ACK,链接进入close_wait状态。但如果服务器端不执行socket的close()操作,状态就不能由close_wait迁移到last_ack,则系统中会存在很多close_wait状态的连接,如下图所示: 可能的原因如下:关闭...原创 2018-01-18 13:48:30 · 6089 阅读 · 0 评论 -
Too many open files问题排查
原因:进程打开的文件数/Socket连接数超过了系统设置的上限; 统计进程打开的文件数: lsof | grep [pid] | wc -l; 查看进程能够打开文件数的上限: cat /proc/[pid]/limits,max open files即为进程可打开的文件数上限; 修改文件上限: 方法1:启动脚本里通过ulimit主动复制,如ulimit -n 65535; 方法2原创 2018-01-27 10:25:45 · 680 阅读 · 0 评论 -
Load过高问题排查
情况1:CPU高、Load高通过top命令查找占用CPU最高的进程PID;通过top -Hp PID查找占用CPU最高的线程TID;对于java程序,使用jstack打印线程堆栈信息;通过printf %x tid打印出最消耗CPU线程的十六进制;在堆栈信息中查看该线程的堆栈信息;情况2:CPU低、Load高通过top命令查看CPU等待IO时间,即%wa;通过iostat -d -x原创 2018-01-20 19:27:15 · 1182 阅读 · 0 评论 -
网卡中断占用CPU过高问题排查
排查过程通过top命令查看hi/si(硬件中断/软中断占用CPU百分比)是否过高;通过/proc/interrupts 查看系统中断信息,看网卡中断是否过高;如果CPU不均衡(某个CPU中断很高、其它正常),需要开启RPS/RFS或者RSS;原创 2018-01-29 15:47:43 · 4042 阅读 · 0 评论 -
“concurrent mode failure”问题排查
concurrent mode failure是什么? CMS垃圾收集器特有的错误,CMS的垃圾清理和引用线程是并行进行的,如果在并行清理的过程中老年代的空间不足以容纳应用产生的垃圾,则会抛出“concurrent mode failure”。concurrent mode failure影响 老年代的垃圾收集器从CMS退化为Serial Old,所有应用线程被暂停,停顿时间变...原创 2018-04-08 21:00:03 · 2280 阅读 · 0 评论 -
“promotion failed”问题排查
触发时机 YGC时,Survivor空间溢出,溢出部分对象进入老年代时,如果空间不足则抛出“promotion failed”错误。造成影响触发FGC可能原因及方案Survivor空间过小;老年代空间小或者碎片多;原创 2018-04-09 10:35:42 · 3600 阅读 · 1 评论 -
FGC问题排查
问题及原因分类FGC问题分类目前遇到的FGC问题主要分为两大类:FGC频繁(频率高);停顿时间长(FGC持续时间长);FGC原因分类引发FGC问题的原因也主要分为两大类:JVM参数设置不合理;程序Bug;FGC频繁排查JVM参数不合理Young与Old比例不合理Old空间占比过小;Eden与Survivor比例不合...原创 2018-04-09 13:01:47 · 4064 阅读 · 0 评论 -
Connection reset by peer问题排查
现象线上环境:客户端连接被定时关闭,服务端不断抛出“Connection reset by peer”异常;日常环境:一切功能正常;问题分析 线上环境的网络线路图如下图所示,日常与线上的差别在于日常环境没有LVS,因此猜想可能是LVS导致,通过tcpdump工具进行抓包,发现LVS会定时关闭与Client、Server间的连接,周期为90s,猜测可能跟连接的空闲超时参数设置相关。 排查原创 2018-04-02 19:41:03 · 14729 阅读 · 1 评论 -
Java进程突然消失
几种可能的原因:Java应用程序的问题:发生OOM导致进程Crash;JVM出错:JVM或JDK自身的Bug导致进程Crash;被操作系统OOM-Killer;原因1:JVM发生OOM 最常见的是发生堆内存异常“java.lang.OutOfMemoryError: Java heap space”,排查步骤如下:查看JVM参数 -XX:+HeapDumpOnOutOfMemoryEr原创 2017-09-24 11:33:38 · 6835 阅读 · 0 评论