mysql意外宕機現象分析
最近在雲上的博客系統總是資料庫宕機導致服務異常。登到伺服器上重啟mysql有時也啟動不了,查看mysql的日誌,發現如下錯誤:
InnoDB: mmap(137363456 bytes) failed; errno 12
InnoDB: Cannot allocate memory for the buffer pool
搜索「InnoDB: mmap(137363456 bytes) failed; errno 12」發現是內存不夠了,解決辦法很簡單,修改一下/etc/my.cnf
innodb_buffer_pool_size=32M
高版本的mysql這個參數默認是128M。
用free -m 查看了下系統,發現可用內存確實不夠128M,用top 查看,按下M,看到很多php-fpm進程,用
ps -ef|grep php-fpm | wc -l
查看一下發現,有37個,這樣佔用的內存過多,導致mysql在申請內存時,沒有足夠內存可用而導致宕機。
搜索「php-fpm進程過多」,發現是php-fpm 子進程設置問題。 使用pm = dynamic 模式下,修改一下參數:
pm.max_children = 25
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 10
這樣,重啟下php-fpm,php-fpm的進程在訪問限制的時候會降到10個。
pm.max_children:靜態方式下開啟的php-fpm進程數量。
pm.start_servers:動態方式下的起始php-fpm進程數量。
pm.min_spare_servers:動態方式下的最小php-fpm進程數。
pm.max_spare_servers:動態方式下的最大php-fpm進程數量。
※JDBC連接SQLsever2008出現錯誤,求解決
※vue-cli的工程模板與構建工具
TAG:程序員小新人學習 |