记一次线上死锁排查

前段时间偶尔会收到线上MySQL死锁告警通知,由于有补偿机制,最终业务会处理成功,所以没太关心。

1
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction

最近又收到了相同的告警,可能不是偶然事件,于是开始排查。
首先翻看了日志,结合代码,没有发现什么问题。事发时应该也没有什么大批量并发事件。

阅读更多

关闭代码块移动

Mac 开启了三指拖拽,发现在IDEA的某些Project中,选中代码块时,老是拖动代码。解决办法:

1
Editor –> General -> Enable Drag’n’Drop functionality in Editor 

关闭即可。

利用mybatis标签替换硬编码

建议

利用mybatis标签替换硬编码

背景

在项目中偶尔看到这样的代码:

1
2
3
4
5
6
7
8
9
<sql id="querySqlString">
<where>
1=1
<if test="fundsOrderIdList != null and fundsOrderIdList.size()>0">
and funds_order_id IN
<foreach collection="fundsOrderIdList" item="id" index="index" open="(" close=")" separator=",">
#{id}
</foreach>
</if>

这段代码中有个1=1很扎眼,这个不是bug,也没有什么性能问题,只是程序员世代传承下来的一个习惯。

阅读更多

命令收藏

mac

关闭SPI(获取根目录写权限)

  • 重启 command+R 进入恢复界面
  • 实用工具 - 终端 输入:csrutil disable
  • 重启:reboot
  • 打开终端,挂载根目录:sudo mount -uw /
阅读更多

常见集群方式

主从(master-slave)

写master,同步到slave 。slave可用于读。常见mysql,redis。

哨兵

在主从的基础上,添加了master宕机时,slave自动切换为master。

cluster

集群内每个节点都是分片。通过分布式一致性协议沟通。

例如redis,通过Gossip 协议,在集群内同步,各个分片的哈希槽信息。

便于重定向请求。

RocketMQ RMQ_SYS_TRANS_HALF_TOPIC 爆掉的问题

现象

SaaS项目东郭反应,项目中发的事务消息一直在RMQ_SYS_TRANS_HALF_TOPIC中,并且不断增长。随即我们查看RocketMQ日志发现如下情况:

这个本来是RocketMQ正常的逻辑,发送事务消息后没有提交状态的话,当达到超时时间后,RocketMQ会回查本地事务状态。这里显示的是回查的次数超限,消息被移到了TRANS_CHECK_MAXTIME_TOPIC中。

不正常的是REAL_TOPIC变成了RMQ_SYS_TRANS_HALF_TOPIC,正常应该是原始的业务消息TOPIC才对。于是我们带着这个问题开始排查起来。

阅读更多

tk.mybatis与Activiti共存问题解决

由于tk.mybatis依赖了persistence-api,会让Activiti装配JpaProcessEngineAutoConfiguration,因为其@conditonalOnclass(name = “javax.persistence.EntityManagerFactory”)。

但实际没有使用JPA,导致启动报错。如果排除persistence-api,又会导致tk.mybatis报错。

参考了一番其它的人做法,无论是各种排除还是添加依赖都无效。

最终自己的解决方案是:

首先排除activiti jpa的自动装配:

1
@SpringBootApplication(exclude={JpaProcessEngineAutoConfiguration.class})。

然后找到activiti中的DataSourceProcessEngineAutoConfiguration.class 复制出源码,在自己的项目中添加一个同名文件(不同名也行)。然后粘贴内容到新建的文件中。最后删掉:

1
@ConditionalOnMissionClass(name = "javax.persistence.EntityManagerFactory")

Ok,搞定!

被隔离的第7天

被隔离的第7天,每天接到无数个部门的电话,量体温,报情况。