应用假死?

有个客户10月18日应用接口都访问慢,nginx层面error显示连接拒绝,当时实施同学重启了java应用运行正常,但今天又卡死了,后台登录也登录不上去,看日志没异常,最终找到了数据库层面。

查看数据库相关日志:

/var/log/messages (系统日志)---无error日志

/mysqld.log 显示以下的warning报错

这个报错的意思是数据库的缓冲池找不到空闲块了。和缓冲池设置大小有关。

show variables like '%buffer%';

innodb_buffer_pool是 InnoDB 缓冲池,是一个内存区域保存缓存的 InnoDB 数据为表、索引和其他辅助缓冲区。innodb_buffer_pool_size 是这个缓冲池的大小,默认128M(即134217728 bytes)

如果不设置innodb_buffer_pool_size,在生产环境的sql执行效率将大大下降,原因是缓存的空间变小,能缓存的数据量有限,缓存的命中率大打折扣,会导致反复去磁盘上读数据,众所周知磁盘的速度远远低于内存的执行效率。

那设置多大合适呢?如何配置呢?

两种设置方式,区别在于MySQL的运行状态,静态设置需要重启MySQL,动态设置在MySQL运行期动态调整。

静态设置

  • 修改my.cnf,在[mysqld]作用域添加 innodb_buffer_pool_size=2G
  • 重启mysql。

动态设置

  • 执行SET GLOBAL innodb_buffer_pool_size=计算值; 设置缓冲池大小。
  • 执行SHOW STATUS WHERE Variable_name='InnoDB_buffer_pool_resize_status'; 查询缓冲池大小改变状态,出现 Completed resizing buffer pool at 时间戳 即完成。
  • 执行SELECT @@innodb_buffer_pool_size; 查询当前缓冲池大小。

如何查看系统的物理内存?确认设置的缓冲池大小合适呢?

free -h

相关推荐
audyxiao00120 分钟前
人工智能顶级期刊PR论文解读|HCRT:基于相关性感知区域的混合网络,用于DCE-MRI图像中的乳腺肿瘤分割
网络·人工智能·智慧医疗·肿瘤分割
zbtlink1 小时前
户外路由器和家用路由器:差异解析与混用考量
网络·智能路由器
じ☆冷颜〃7 小时前
黎曼几何驱动的算法与系统设计:理论、实践与跨领域应用
笔记·python·深度学习·网络协议·算法·机器学习
风送雨7 小时前
FastMCP 2.0 服务端开发教学文档(下)
服务器·前端·网络·人工智能·python·ai
芯盾时代8 小时前
石油化工行业网络风险解决方案
网络·人工智能·信息安全
线束线缆组件品替网8 小时前
Weidmüller 工业以太网线缆技术与兼容策略解析
网络·人工智能·电脑·硬件工程·材料工程
以太浮标9 小时前
华为eNSP模拟器综合实验之-BFD联动配置解析
运维·网络·华为·信息与通信
ICT系统集成阿祥10 小时前
OSPF邻居建立失败完整排查指南
网络·网络协议
liulilittle11 小时前
OPENPPP2 Code Analysis One
网络·c++·网络协议·信息与通信·通信
叫致寒吧11 小时前
k8s操作(三)
网络·容器·kubernetes