MySQL 似乎崩溃了,通常是在当天晚些时候,但我不明白为什么!它显示内存不足,但有大量可用内存,并且没有使用交换空间。我正在使用 Azure。
以下是日志:
Oct 3 20:42:20 GenyxLive kernel: [787828.711240] Out of memory: Kill process 53891 (mysqld) score 84 or sacrifice child
Oct 3 20:42:20 GenyxLive kernel: [787828.714081] Killed process 53891 (mysqld) total-vm:871780kB, anon-rss:58164kB, file-rss:0kB
Oct 3 20:42:20 GenyxLive kernel: [787828.731974] init: mysql main process (53891) killed by KILL signal
Oct 3 20:42:20 GenyxLive kernel: [787828.733525] init: mysql main process ended, respawning
Oct 3 20:42:20 GenyxLive kernel: [787828.974636] init: mysql main process (24975) terminated with status 1
Oct 3 20:42:20 GenyxLive kernel: [787828.974666] init: mysql main process ended, respawning
Oct 3 20:42:21 GenyxLive kernel: [787829.937186] init: mysql post-start process (24976) terminated with status 1
Oct 3 20:42:22 GenyxLive kernel: [787830.103158] init: mysql main process (25002) terminated with status 1
Oct 3 20:42:22 GenyxLive kernel: [787830.103194] init: mysql respawning too fast, stopped
以下是正在发生的事情的图表:
您可以看到 CPU 峰值,然后 mysql 服务停止......
有人能帮我弄清楚发生了什么事吗?
Ubuntu 12.04
Azure Small(768mb 内存,1ghz CPU)
编辑
有一个每 5 分钟运行一次的 cron 作业,用于检查新域等(使用 zpanel)。
它是一个 64 位操作系统
Linux GenyxLive 3.2.0-48-virtual #74-Ubuntu SMP Thu Jun 6 20:02:55 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
free -lm
结果:
total used free shared buffers cached
Mem: 672 491 180 0 42 118
Low: 672 491 180
High: 0 0 0
-/+ buffers/cache: 330 341
Swap: 0 0 0
cat /proc/meminfo
结果:
MemTotal: 688348 kB
MemFree: 186788 kB
Buffers: 43956 kB
Cached: 120988 kB
SwapCached: 0 kB
Active: 335908 kB
Inactive: 84924 kB
Active(anon): 255976 kB
Inactive(anon): 296 kB
Active(file): 79932 kB
Inactive(file): 84628 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 16 kB
Writeback: 0 kB
AnonPages: 255924 kB
Mapped: 18568 kB
Shmem: 376 kB
Slab: 51788 kB
SReclaimable: 37052 kB
SUnreclaim: 14736 kB
KernelStack: 1344 kB
PageTables: 7632 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 344172 kB
Committed_AS: 967220 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 13192 kB
VmallocChunk: 34359723128 kB
HardwareCorrupted: 0 kB
AnonHugePages: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 51136 kB
DirectMap2M: 735232 kB
答案1
仅当资源非常紧张时,内核 OOM 才会启动……因此您一定是内存不足,但此时该图表就没有多大意义了。
显示什么free -lm
?另外,显示什么cat /proc/meminfo
?
就问题的触发器而言,此时是否会运行某些维护过程或其他 cron 作业,这些作业可能会执行查询,而 mysql 需要在内存中维护临时表?
顺便问一下... 这是 32 位版本的操作系统吗?我只是想知道你的低内存是否耗尽了。
编辑1 好的。好吧,mysqld 将是消耗内存最多的进程,所以这很可能就是它被选中的原因。检查您的 apache 配置,看看您生成了多少个工作线程……每个线程都会有内存开销,并且当生成更多线程时,您可能会因为没有交换空间而耗尽内存。检查您的 MaxClients 参数……如果您有超过 50 个(只是一个大概的数字),这可能是一个不错的查看位置。我建议您看看Apache 性能调优。