经过多次的折腾,我们想起之前在模板上修改了一个相关的参数vm.overcommit_memory=2 ,我们将 vm.overcommit_memory = 0 后问题消失,数据库压测1000- 3000...overcommit 这个参数是存在在LINUX 系统上的参数,功能是操作系统给付给进程的内存的大小. 实际上内存永远不够用,一般都是通过虚拟和物理之间的映射....这里引入一个LINUX 发现内存不够使用后尽快KILL PROCESS的公式
CommitLimit = (Physical RAM * vm.overcommit_ratio / 100) + Swap...那么到底程序是怎么申请内存的,以MYSQL为例 正在运行的MYSQL 在申请内存时通过malloc()函数,来动态的分配内存,他找到与申请内存大小相同的未使用的连续的块,并且返回给MYSQL 相关的内存空间的指针...那么那些应用程序容易被选择成 KILL的对象, 这里会通过内存的消耗, 到底这个进程的重要性,CPU 消耗, 等进行评估, 那么另一个问题是为什么他们要KILL MYSQL , 不能kILL别的程序吗