故障排除指南:MySQL运行内存不足怎么办?

  

  故障排除对于所有人来说都不会是一件有趣的事情,尤其是在没有崩溃报告的情况下。如果MySQL因内存不足而崩溃时应该怎么办?彼得·扎伊采夫曾在2012年写过的一篇博客中给出了许多有用的提示,而利用新版本的MySQL(5.7及以上)和performance_schema,我们可以更轻松地解决MySQL内存分配问题。   

  

  故障排除指南:MySQL运行内存不足怎么办?”>
  </p>
  <p>
  本文将向大家介绍如何解决MySQL内存分配问题。
  </p>
  <p>
  首先,我们先来看一下在哪些情况下MySQL会因内存不足而崩溃:
  </p>
  <ul类=   <李>   

  当MySQL尝试分配比可用内存更多的内存时,例如没有正确设置通过innodb_buffer_pool_size;   

  李   <李>   

  服务器上还有一些其他进程可以分配内存,比如它应用程序(java、python、php), Web服务器,或者是备份(即,mysqldump)。   

  李   <李>   

  MySQL中的内存泄漏。这是最糟糕的情况,我们需要进行故障排除。   

  李      

  以上,就是常见的三种MySQL因内存不足而崩溃的情况,其中前两种情况比较好解决,而第三种情况就比较棘手。   

  

  <强>   从哪里开始排除MySQL内存泄漏问题      

  

  假设这是一个Linux服务器,首先我们要   <强>   检查Linux操作系统和配置      ,   

     <李>   

  检查mysql错误日志和Linux日志文件(即/var/log/消息或/var/log/syslog)来识别崩溃。你可能会看到伯父杀手杀死mysql的条目,可以使用“dmesg命令”来显示相关的详细信息。   

  李   <李>   

  <强>   检查可用的内存:      free  -g ,//cat  proc  meminfo   

  李   <李>   

  <强>   检查哪些应用程序正在使用内存:      “顶级”或“htop”   

  李   <李>   

  <强>   检查mysql配置:   /etc/my.cnf或一般/etc/my*(包括/etc/mysql/*等文件),MySQL可能正在运行不同的my.cnf (run  ps , ax  |, grep  mysql ,)   

  李   <李>   

  <强>   运行,vmstat  5, 5,,以查看系统是否正在通过虚拟内存进行读/写以及是否正在进行交换      

  李   <李>   

  <强>   对于非生产环境,我们可以使用其他工具(如Valgrind gdb等)来检查MySQL的使用情况。      

  李      

  <强>   检查MySQL内部      

  

  我们也可以通过检查MySQL内部来发现潜在的MySQL内存泄露.MySQL在很多地方都会有内存分配,尤其是在以下情况下:   

  

  现在我们可以检查MySQL内部的东西来寻找潜在的MySQL内存泄漏。   

  

  MySQL在很多地方分配内存。特别:   

     <李>   

  表缓存   

  李   <李>   

  Performance_schema(运行:show  engine  performance_schema  status ,并查看最后一行)。   

  李   <李>   

  InnoDB(运行,show  engine  innodb  status ,并检查缓冲池部分,为buffer_pool和相关缓存分配的内存)   

  李   <李>   

  RAM中的临时表(通过运行以下语句查找所有内存表:,select  *,得到information_schema  .tables  where  engine =& # 39;记忆# 39;,,)   

  李   <李>   

  准备好的语句。   

  李      

  不过,从MySQL 5.7版本开始,我们就可以在performance_schema中查看内存分配,那么,如何使用呢?   

  

  首先,我们需要启用收集内存指标.Run:   

  <前>   UPDATE  setup_instruments  SET  ENABLED =,,, & # 39;是的# 39;   WHERE  NAME  LIKE  & # 39;内存/% & # 39;;   之前   

  系统模式      报告      

  

  

  

  

  <前>   select  event_name, current_alloc, high_alloc   得到sys.memory_global_by_current_bytes   where  current_count 祝辞,0;   之前   

故障排除指南:MySQL运行内存不足怎么办?