问题背景:
服务器中数据库出现死锁情况,排查后发现,数据库中大量写入日志的进程为running状态,日志无法写入。在kill掉对应进程后,仍然存在无法写入日志的情况。同时java服务的日志也不再打印,Jar包无法重启。
数据库死锁排查命令
1.查看当前正在进行中的进程
SHOW processlist
2.查看正在进行中的事务
SELECT * FROM information_schema.INNODB_TRX
3.查看正在锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
4.查看等待锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
5.查询是否锁表
SHOW OPEN TABLES where In_use > 0;
解决过程
在排查的过程中,发现通过vi 打开文件就会报错,Write error in swap file,Unable to open swap file for "cron", recovery impossible。随后查看通过服务器磁盘空间,发现/dev/vda1 的使用空间为0,进一步排查后发现,由于大量的日志堆满了根分区的空间,清理后系统恢复正常。排查指令如下
查看系统磁盘空间命令
1.查看磁盘占用情况
df -lh
/dev/vda1 40G 40G 0G 100% /
2.进入根目录
cd /
3.执行查看磁盘占用命令,此时可以看到不同目录下磁盘占用情况
du -sh *
4.找到占用磁盘最多的几个目录,进行排查,清楚垃圾文件即可