当前位置: 首页 > article >正文

应用假死?

有个客户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


http://www.kler.cn/news/365341.html

相关文章:

  • java脚手架系列10-统一缓存、分布式锁
  • AIGC底层技术揭秘
  • PHP PDO:安全、灵活的数据持久层解决方案
  • sql-labs靶场第二十关测试报告
  • 智能园艺:Spring Boot植物健康系统
  • 算法革新决定未来!深挖数字北极星3.0背后的技术逻辑
  • HTTP和HTTPS基本概念,主要区别,应用场景
  • 华为配置 之 IPv6路由配置
  • Rust求解八皇后问题
  • C# 文档打印详解与示例
  • 三维管线管网建模工具MagicPipe3D V3.5.3
  • Clickhouse 笔记(一) 单机版安装并将clickhouse-server定义成服务
  • 【华为HCIP实战课程十四】OSPF网络中LSA过滤,网络工程师
  • [网络协议篇] UDP协议
  • docker部署rustdesk
  • Linux系统中使用yum命令高效更新镜像源的步骤
  • 等保测评:安全计算环境的详细讲解
  • React第十一章(useReducer)
  • 语音识别——使用Vosk进行语音识别
  • Angular 保姆级别教程高阶应用 - RxJs
  • 在Milvus中管理标量Indexes
  • docker 下载netcore 镜像
  • springboot044美容院管理系统(论文+源码)_kaic
  • 处理Hutool的Http工具上传大文件报OOM
  • 回顾复习1:
  • pycharm导出环境安装包列表