问题&优化归集
文章平均质量分 85
线上问题处理 & 服务性能优化等
JdbcUtils
生活不止眼前的苟且,还有诗和远方。
展开
-
整理一下:遇到的Java服务故障问题及排查方案
常见问题 1:CPU 利用率高问题CPU 使用率是衡量系统繁忙程度的重要指标,一般情况下单纯的 CPU 高并没有问题,它代表系统正在不断的处理我们的任务,但是如果 CPU 过高,导致任务处理不过来,这个是非常危险需要关注的。CPU 使用率的安全值没有一个标准值,取决于你的系统是计算密集型还是 IO 密集型,一般计算密集型应用 CPU 使用率偏高 load 偏低,IO 密集型相反。问题原因:1、频繁 FullGC/YongGC如何排查:查看 gc 日志;jstat -gcutil pid 查看原创 2021-03-28 13:45:20 · 1137 阅读 · 0 评论 -
使用 MAT 排查分析 OOM 问题案例
MAT相信有一定经验的开发者多少都会在生产环境上碰到过内存溢出(OOM)的问题吧。对于排查 OOM 问题、分析程序堆内存使用情况,最好的方式就是分析堆转储。Java 的 OutOfMemoryError 是比较严重的问题,需要分析出根因,所以对生产应用一般都会这样设置 JVM 参数,方便发生 OOM 时进行堆转储:-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/xxx/xxx关于分析堆存储文件的话,推荐使用Eclipse 的 Memory Ana原创 2020-08-13 15:56:54 · 2524 阅读 · 0 评论 -
HashMap引发死链问题(HashMap、ConcurrentHashMap原理解析)
事故背景一个CPU使用率飙升至100%的线上故障,原因是在并发情况下使用HashMap导致死循环。当cpu使用率100%时,查看堆栈,发现程序都卡在了HashMap.get()这个方法上了,重启程序后问题消失。但是过段时间又会来。HashMap结构HashMap 是我们经常会用到的集合类,JDK 1.7 之前底层使用了数组加链表的组合结构,如下图所示:HashMap通常会用一个指针数组...原创 2020-03-31 23:06:12 · 4388 阅读 · 7 评论 -
记一次通过优化日志解决高并发服务性能瓶颈问题
事故发现服务在生产环境中,由于同一时间段请求量过大,导致服务响应速度急剧下降。甚至会出现拒绝服务的问题,第一时间想到是机器性能问题,无法满足并发如此大的场景,需要进行扩容或者服务限流。经过扩容之后平稳了一个多月之后,又一次大量请求打进来的时候出现了此问题。这时才意识到开始从各个角度去排查问题。事故排查过程一个系统的吞吐量(承压能力)与request对CPU的消耗、外部接口、IO等等紧密关联。...原创 2020-03-18 17:50:24 · 36585 阅读 · 0 评论 -
一套适用于大部分系统的优化流程
常规系统优化流程:1.0 应用程序优化分析应用程序等GC日志,查看程序是否有优化等空间,或者某些业务代码是否可以进行优化,这个涉及的面比较广。1.1 数据表索引优化WEB服务器的CPU闲来无事,但数据库服务器的CPU使用率高居不下。经过初步分析,发现瓶颈在数据库。解决方案:监控数据库的访问,整理出那些耗时的SQL,并且进行SQL查询分析。根据分析结果,对数据表索引进行重新整理。同时也...原创 2018-12-28 10:22:00 · 13034 阅读 · 0 评论 -
同步锁的优化思路及JDK对锁的一些优化
一、锁优化的思路和方法主要有以下5点:减少锁持有时间主要就是精准的确定需要加锁的模块,不需要加锁的代码模块分离在同步块之外。减小锁粒度将大对象(这个对象可能会被很多线程访问),拆成小对象,大大增加并行度,降低锁竞争。降低了锁的竞争,偏向锁,轻量级锁成功率才会提高。最最典型的减小锁粒度的案例就是ConcurrentHashMap。锁分离最常见的锁分离就是读写锁ReadWri...原创 2019-04-10 16:47:08 · 52515 阅读 · 0 评论 -
总结一些索引使用和优化规范
1、索引列的数据长度能少则少。答:这个原因很简单,B-Tree各个节点能存储信息更多,减少树的告诉,效率自然也能得到提示。2、索引一定不是越多越好,越全越好,一定是建合适的。答:索引多了,检索速度虽然可能得到提升。但是“写”相关操作的效率可就不容小觑了。3、匹配列前缀可用到索引like abc%。但是 like %9999%、like %9999用不到索引。答:最左匹配原则。4、Whe...原创 2019-04-01 20:40:15 · 51823 阅读 · 0 评论 -
Java进程CPU占用率高的排查和常见解决方案
当系统出现卡顿或者应用程序的响应速度非常慢,就可能要考虑到服务其上排查一番,以下是我常用的排查流程:1、top:观察占用CPU或者MEN(内存)使用情况最高的进程,记录PID;TIP:(1)、“1” 显示出多个逻辑CPU使用情况;(2)、“X” 高亮显示CPU列,并排序,"Z"红色展示;(3)、“shift + <” 或者 “shift + >” 变更高亮的列;(4)、“F...原创 2019-01-10 17:13:15 · 62579 阅读 · 0 评论 -
JAVA 内存泄露详解(示例及解决方式)
尝试了通过一张图片转载,效果还可以,就是原博主的代码格式太酷炫,亮瞎了。转载 2019-01-10 15:10:42 · 55098 阅读 · 0 评论 -
Mybatis中的SQL防注入
sql注入大家都不陌生,是一种常见的攻击方式,攻击者在界面的表单信息或url上输入一些奇怪的sql片段,例如“or ‘1'='1'”这样的语句,有可能入侵参数校验不足的应用程序。所以在我们的应用中需要做一些工作,来防备这样的攻击方式。在一些安全性很高的应用中,比如银行软件,经常使用将sql语句全部替换为存储过程这样的方式,来防止sql注入,这当然是一种很安全的方式...原创 2018-04-25 18:50:19 · 5473 阅读 · 0 评论 -
在一个千万级的数据库查询中,多方面分析如何提高查询效率
在一个千万级的数据库查寻中,如何提高查询效率?(1)、数据库设计方面:a. 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 b. 应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在n...转载 2018-08-29 22:48:47 · 12758 阅读 · 0 评论 -
Timer单线程的缺陷 用ScheduledExecutorService替代
1、Timer管理延时任务的缺陷a、以前在项目中也经常使用定时器,比如每隔一段时间清理项目中的一些垃圾文件,每个一段时间进行数据清洗;然而Timer是存在一些缺陷的,因为Timer在执行定时任务时只会创建一个线程,所以如果存在多个任务,且任务时间过长,超过了两个任务的间隔时间,会发生一些缺陷:下面看例子:Timer的源码:[java] view plain copypubl...原创 2018-05-17 10:25:55 · 5814 阅读 · 2 评论 -
并发编程中的死锁定位排查
1、死锁定义: 死锁是一种特定的程序状态,在实体之间,由于循环依赖导致彼此一直处于等待之中,没有任何个体可以继续前进。死锁不仅仅是在线程之间会发生,存在资源独占的进程之间同样也可能出现死锁。通常来说,我们大多是聚焦在多线程场景中的死锁,指两个或多个线程之间,由于互相持有对方需要的锁,而永久处于阻塞的状态。 示例图理解基本的死锁问题: 2、死锁实例:/** * 死锁测试 **/...原创 2018-07-31 10:40:01 · 5584 阅读 · 0 评论