配置推送错误导致DB被kill

运维 系统运维
这是日常环境发生的一起mysql收到kill信号的问题,作者维西(@维西V )将其整理如下。

【编者按】这是日常环境发生的一起mysql收到kill信号的问题,作者维西(@维西V )将其整理如下:

【问题表现】

在功能测试时,mysql经常被kill掉,有较统一的时间间隔:

gbk可以看到是明确的kill 信号                                     

NewImage

【问题原因】

首先排除了人为后台脚本进行kill,检查环境时发现ulimit 有异常参数:

  1. $ ulimit -t  
  2. 300  
  3. (-t The maximum amount of cpu time in seconds)  
  4. (实际上为,进程消耗cpu的总量,达到阈值后会自己被kill) 

【影响范围】

       SQA的DB机器8台,web app机器5台

【问题分析】

标准DB模版clone中,和ulimit相关的文件如下,(优先级低->高):

  1. cat /etc/security/limits.d/tops_dba_limits.conf   
  2. *   soft    nofile  131070  
  3. *   hard    nofile  131070  
  4. *   soft    nproc   131070  
  5. *   hard    nproc   131070  
  6. cat /etc/security/limits.conf  
  7. *   soft    nproc   131070  
  8. *   hard    nproc   131070  
  9. *   soft    nofile  131070  
  10. *   hard    nofile  131070 

所以ulimit -t参数为默认值unlimited,该机器上的配置文件和clone一致,但运行ulimit -t显示的竟然是300。

经排查发现,OS配置管理时,一个任务为对自己所用资源做限制,

连接进来后申明了ulimit -t 300的session参数

然后该任务不断扩展,增加了重启sshd操作,导致后续ssh进来的进程继承了300的配置,导致问题

 (新进程先继承session参数,后读取OS配置文件,但配置文件未写出cpu limit,合并后取300)。

【源码】

  1. ./kernel/posix-cpu-timers.c:1139  
  2. view sourceprint?  
  3. if (psecs >= sig->rlim[RLIMIT_CPU].rlim_max) {  
  4.              /*  * At the hard limit, we just die.No need to calculate anything else now.*/  
  5.              __group_send_sig_info(SIGKILL, SEND_SIG_PRIV, tsk);  
  6.              return;    
  7.      }  
  8.      if (psecs >= sig->rlim[RLIMIT_CPU].rlim_cur) {  
  9.              /*  At the soft limit, send a SIGXCPU every second. */  
  10.              __group_send_sig_info(SIGXCPU, SEND_SIG_PRIV, tsk);  
  11.              if (sig->rlim[RLIMIT_CPU].rlim_cur  
  12.                  < sig->rlim[RLIMIT_CPU].rlim_max) {  
  13.                      sig->rlim[RLIMIT_CPU].rlim_cur++;  
  14.  }  
  15.      } 

【改进措施】

/etc/security/limits.conf中对all账号,显式注明cpu unlimited (soft/hard)

底层配置管理或者批量操作时,避免使用小众命令,尽量使用常规命令和成熟工具。

责任编辑:黄丹 来源: mysqlsky.com
相关推荐

2022-01-13 11:41:55

URLDoSRCE

2009-12-16 14:28:56

路由器配置

2022-09-03 23:52:27

云计算漏洞安全

2011-04-14 13:12:57

OSPF路由

2023-11-09 08:00:00

NoSQL数据库

2010-01-08 15:11:15

交换机安装位置

2011-04-08 18:17:40

路由OSPF

2023-04-26 00:06:22

服务器死循环报错

2011-04-08 18:10:31

路由

2022-07-08 08:47:48

CIOKPIIT

2018-07-27 08:46:45

集成云计算备份

2021-04-12 20:16:58

企业高管首席执行官CIO

2023-12-04 09:49:06

微软

2012-05-06 09:09:00

2023-09-05 19:50:03

2012-12-13 13:38:22

nginx目录遍历漏洞

2021-10-28 09:54:01

割接路由配置网络

2009-04-08 08:26:56

Sun沦落福布斯

2018-02-06 17:50:55

区块链比特币

2009-12-16 11:01:37

路由器配置
点赞
收藏

51CTO技术栈公众号