MySQL ล่มเป็นระยะพร้อมด้วยข้อผิดพลาด“ ข้อผิดพลาดร้ายแรง: ไม่สามารถจัดสรรหน่วยความจำสำหรับบัฟเฟอร์พูล”


40

เพิ่มเมื่อแก้ไข 2013-05-29:เนื่องจากนี่เป็นคำถามและการอภิปรายที่ยาวนานนี่เป็นบทสรุปโดยย่อของคำถามและวิธีแก้ไข ฉันมีปัญหาในการใช้งาน MySQL และ Apache บนเซิร์ฟเวอร์ Linux ขนาดเล็ก (หน่วยความจำ 1 GB) Apache ยังคงต้องการหน่วยความจำเพิ่มขึ้นและในฐานะที่เป็นระบบปฏิบัติการนั้นก็จะฆ่า MySQL เพื่อให้ได้หน่วยความจำกลับคืนมา วิธีแก้ไขคือแทนที่ Apache ด้วย Lighttpd หลังจากที่ฉันทำอย่างนั้นแล้วการใช้หน่วยความจำบนเซิร์ฟเวอร์มีความเสถียรอย่างสมบูรณ์เป็นเวลาหลายเดือนแล้วและฉันก็ไม่พบปัญหาใด ๆ สิ้นสุดการแก้ไข

ฉันเป็นผู้ดูแลระบบเริ่มต้นสำหรับเซิร์ฟเวอร์เสมือนขนาดเล็ก หน้าที่หลักของเซิร์ฟเวอร์คือการรันซอฟต์แวร์ระบบการจัดการหลักสูตรMoodleแบบโอเพ่นซอร์สซึ่งเขียนด้วย PHP มันอาศัยฐานข้อมูลในกรณีนี้ MySQL และเว็บเซิร์ฟเวอร์ในกรณีนี้ Apache

เซิร์ฟเวอร์กำลังเรียกใช้ CentOS 64 บิตรีลีส 5.8 (Final) พร้อมหน่วยความจำ 1 GB และดิสก์ 200 GB, เคอร์เนลรุ่น 2.6.18-308.8.2.el5xen รุ่น MySQL คือ Ver 14.14 Distrib 5.5.25 สำหรับ Linux (x86_64) โดยใช้ readline 5.1

ฉันไม่คิดว่าซอฟต์แวร์ Moodle เป็นผู้ใช้ MySQL อย่างหนัก ปัจจุบันมีครูประมาณสิบคนเท่านั้นที่สามารถเข้าถึงได้และเมื่อฉันดัมพ์และบีบอัดด้วย bzip2 ฐานข้อมูลทั้งหมดขนาดของดัมพ์ที่ได้จะน้อยกว่า 1 MB

ฉันตั้งระบบไม่กี่เดือนที่ผ่านมา เซิร์ฟเวอร์ Apache เสถียรตลอดเวลา แต่ MySQL ผิดพลาดหลายครั้ง ฉันพยายามเรียนรู้เกี่ยวกับการกำหนดค่าที่เหมาะสมที่สุดจากเว็บและครั้งสุดท้ายที่ฉันเปลี่ยน/etc/my.cnfไฟล์ฉันใช้ไฟล์/usr/share/doc/mysql55-server-5.5.25/my-large.cnfที่มาพร้อมกับ MySQL เป็นตัวอย่าง ไฟล์บอกว่ามันมีไว้สำหรับระบบที่มีหน่วยความจำ 512 MB ดังนั้นฉันคิดว่าการใช้พารามิเตอร์การกำหนดค่าที่เกี่ยวข้องกับหน่วยความจำจะปลอดภัยสำหรับระบบนี้ (ก่อนหน้านี้ฉันเคยกำหนดค่าพารามิเตอร์ที่เกี่ยวข้องกับหน่วยความจำของ MySQL ด้วยจำนวนที่น้อยกว่ามากและฉันคิดว่ามันอาจทำให้เกิดการล่มได้ในขณะที่การล่มยังคงเกิดขึ้นระบบจะเร็วขึ้นอย่างน้อยตอนนี้) นี่คือเนื้อหาปัจจุบันของ/etc/my.cnf:

# /etc/my.cfg

# The main and only MySQL configuration file on [WEBSITE ADDRESS REDACTED].
# Last updated 2012-09-23 by Teemu Leisti.

# Most of the memory settings are set to be the same as the example setting file
# /usr/share/doc/mysql55-server-5.5.25/my-large.cnf, which is meant for systems
# with 512M of memory.  This server currently has twice that, i.e. 1G of memory,
# which should make these settings safe.


[client]
default_character_set           = utf8
port                            = 3306
socket                          = /var/lib/mysql/mysql.sock

[mysqld]
character_set_filesystem        = utf8
character_set_server            = utf8
datadir                         = /var/lib/mysql
innodb_additional_mem_pool_size = 20M
innodb_buffer_pool_size         = 256M # You can set .._buffer_pool_size up to
                                       # 50..80% of RAM, but beware of setting
                                       # memory usage too high
innodb_data_file_path           = ibdata1:10M:autoextend
innodb_data_home_dir            = /var/lib/mysql
innodb_flush_log_at_trx_commit  = 1
innodb_lock_wait_timeout        = 50
innodb_log_buffer_size          = 8M
innodb_log_file_size            = 64M # Set .._log_file_size to 25% of buffer
                                      # pool size
innodb_log_group_home_dir       = /var/lib/mysql
interactive_timeout             = 60
key_buffer_size                 = 256M
long_query_time                 = 10
max_allowed_packet              = 1M
max_connections                 = 30
port                            = 3306
query_cache_limit               = 2M # see http://emergent.urbanpug.com/?p=61
query_cache_size                = 16M
read_buffer_size                = 1M
read_rnd_buffer_size            = 4M
skip_networking                 # Only local processes need to use MySQL
skip_symbolic_links             # Disabling symbolic_links is recommended to
                                # prevent assorted security risks
slow_query_log_file             = /var/log/mysql-slow-queries.log
socket                          = /var/lib/mysql/mysql.sock
sort_buffer_size                = 1M
table_open_cache                = 256
thread_cache_size               = 8
thread_concurrency              = 2 #    = number of CPUs * 2
user                            = mysql
wait_timeout                    = 10

[mysqld_safe]
log_error                       = /var/log/mysqld.log
open_files_limit                = 4096
pid_file                        = /var/run/mysqld/mysqld.pid

[mysqldump]
quick
max_allowed_packet              = 16M

[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
safe-updates

[myisamchk]
key_buffer_size                 = 128M
sort_buffer_size                = 128M
read_buffer                     = 2M
write_buffer                    = 2M

[mysqlhotcopy]
interactive-timeout

อย่างที่คุณเห็นในการกำหนดค่าการตั้งค่าใช้เอ็นจิ้น InnoDB และให้บริการเฉพาะการร้องขอจาก localhost นอกเหนือจากผู้ดูแลระบบ (ฉัน) Moodle เป็นเพียงผู้ใช้ MySQL เท่านั้น

เมื่อ MySQL ล่มสิ่งต่อไปนี้จะถูกเขียนลงในล็อกไฟล์อย่างสม่ำเสมอ/var/log/mysqld.log(ยกเว้นการประทับเวลาของหลักสูตร):

120926 08:00:51 mysqld_safe Number of processes running now: 0
120926 08:00:51 mysqld_safe mysqld restarted
120926  8:00:53 [Note] Plugin 'FEDERATED' is disabled.
120926  8:00:53 InnoDB: The InnoDB memory heap is disabled
120926  8:00:53 InnoDB: Mutexes and rw_locks use GCC atomic builtins
120926  8:00:53 InnoDB: Compressed tables use zlib 1.2.3
120926  8:00:53 InnoDB: Using Linux native AIO
120926  8:00:53 InnoDB: Initializing buffer pool, size = 256.0M
InnoDB: mmap(274726912 bytes) failed; errno 12
120926  8:00:53 InnoDB: Completed initialization of buffer pool
120926  8:00:53 InnoDB: Fatal error: cannot allocate memory for the buffer pool
120926  8:00:53 [ERROR] Plugin 'InnoDB' init function returned error.
120926  8:00:53 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
120926  8:00:53 [ERROR] Unknown/unsupported storage engine: InnoDB
120926  8:00:53 [ERROR] Aborting

120926  8:00:53 [Note] /usr/libexec/mysqld: Shutdown complete

120926 08:00:53 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

บางครั้งฉันก็สามารถเริ่มต้น MySQL โดยผู้บังคับบัญชาแต่บางครั้งคำสั่งล้มเหลวกับการส่งออกนี้:service mysqld restart mysqld dead but subsys lockedในกรณีเหล่านี้สิ่งเดียวที่ฉันสามารถนึกถึงในการกู้คืนสถานการณ์คือการรีสตาร์ทเซิร์ฟเวอร์หลังจากที่ MySQL สามารถรีสตาร์ทได้ ในกรณีเหล่านี้ผลลัพธ์จะเป็นดังนี้:

120926 11:43:48 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
120926 11:43:48 [Note] Plugin 'FEDERATED' is disabled.
120926 11:43:48 InnoDB: The InnoDB memory heap is disabled
120926 11:43:48 InnoDB: Mutexes and rw_locks use GCC atomic builtins
120926 11:43:48 InnoDB: Compressed tables use zlib 1.2.3
120926 11:43:48 InnoDB: Using Linux native AIO
120926 11:43:48 InnoDB: Initializing buffer pool, size = 256.0M
120926 11:43:48 InnoDB: Completed initialization of buffer pool
120926 11:43:48 InnoDB: highest supported file format is Barracuda.
InnoDB: The log sequence number in ibdata files does not match
InnoDB: the log sequence number in the ib_logfiles!
120926 11:43:48  InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.
InnoDB: Reading tablespace information from the .ibd files...
InnoDB: Restoring possible half-written data pages from the doublewrite
InnoDB: buffer...
120926 11:43:51  InnoDB: Waiting for the background threads to start
120926 11:43:52 InnoDB: 1.1.8 started; log sequence number 466807107
120926 11:43:52 [Note] Event Scheduler: Loaded 0 events
120926 11:43:52 [Note] /usr/libexec/mysqld: ready for connections.
Version: '5.5.25'  socket: '/var/lib/mysql/mysql.sock'  port: 0  MySQL Community Server (GPL)

นี่คือสิ่งที่คำสั่งfree -mส่งออกในปัจจุบัน:

# free -m
             total       used       free     shared    buffers     cached
Mem:          1024        869        154          0         70        153
-/+ buffers/cache:        644        379
Swap:            0          0          0

โดยปกติแล้วคอลัมน์ "ฟรี" จะอยู่ระหว่าง 50 ถึง 100 MB

ผลลัพธ์ของคำสั่งulimit -a:

# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 8192
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 8192
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

ฉันไม่ได้เปลี่ยนการตั้งค่าหรือไฟล์รหัสของ Moodle ใด ๆ ยกเว้น/var/www/html/moodle/config.phpว่าจะมีลักษณะเช่นนี้ (ลบบรรทัดความคิดเห็นเพื่อประหยัดพื้นที่):

<?php
unset($CFG);  // Ignore this line
global $CFG;  // This is necessary here for PHPUnit execution
$CFG = new stdClass();
$CFG->dbtype    = 'mysqli';           // 'pgsql', 'mysqli', 'mssql', 'sqlsrv' or 'oci'
$CFG->dblibrary = 'native';           // 'native' only at the moment
$CFG->dbhost    = 'localhost';        // eg 'localhost' or 'db.isp.com' or IP
$CFG->dbname    = 'moodle';           // database name, eg moodle
$CFG->dbuser    = 'moodleuser';       // your database username
$CFG->dbpass    = '[REDACTED]';       // your database password
$CFG->prefix    = 'moodle_';          // prefix to use for all table names
$CFG->dboptions = array(
    'dbpersist' => false,       // should persistent database connections be
                                //  used? set to 'false' for the most stable
                                //  setting, 'true' can improve performance
                                //  sometimes
    'dbsocket'  => true,        // should connection via UNIX socket be used?
                                //  if you set it to 'true' or custom path
                                //  here set dbhost to 'localhost',
                                //  (please note mysql is always using socket
                                //  if dbhost is 'localhost' - if you need
                                //  local port connection use '127.0.0.1')
    'dbport'    => '',          // the TCP port number to use when connecting
                                //  to the server. keep empty string for the
                                //  default port
);
$CFG->passwordsaltmain = '[REDACTED]';
$CFG->wwwroot   = 'http://[REDACTED]';
$CFG->dataroot  = '/var/moodledata';
$CFG->directorypermissions = 02777;
$CFG->admin = 'admin';
date_default_timezone_set('Europe/Helsinki');
$CFG->disableupdatenotifications = true;
require_once(dirname(__FILE__) . '/lib/setup.php'); // Do not edit

(อย่างไรก็ตามฉันได้ทำการติดตั้งปลั๊กอิน Moodle สองตัวนั่นคือโมดูลผู้เข้าร่วมและบล็อกแต่ฉันไม่เห็นว่าพวกเขาจะเกี่ยวข้องกับปัญหานี้ได้อย่างไร)

แม้หลังจากที่ฉันอัปเดต/etc/my.cnfเป็นสถานะปัจจุบันเมื่อสัปดาห์ที่แล้ว MySQL ได้ขัดข้องสองสามครั้งด้วยอาการที่ระบุข้างต้น การเป็นผู้เริ่มต้นในการบริหารฐานข้อมูลและหลังจากทำปัญหามากมายเกี่ยวกับปัญหานี้ฉันก็รู้สึกว่าจะทำอะไรต่อไป ข้อเสนอแนะใด ๆ ฉันควรโพสต์ข้อมูลการกำหนดค่าเพิ่มเติมหรือไม่

นอกจากนี้ในการแก้ไข:

เนื้อหาของไฟล์/var/log/messages.1คือ:

Sep 23 04:02:18 [machine name] syslogd 1.4.1: restart.
Sep 26 08:00:51 [machine name] kernel: mysqld invoked oom-killer: gfp_mask=0x201d2, order=0, oomkilladj=0
Sep 26 08:00:51 [machine name] kernel:
Sep 26 08:00:51 [machine name] kernel: Call Trace:
Sep 26 08:00:51 [machine name] kernel:  [<ffffffff802c1bd5>] out_of_memory+0x8b/0x203
Sep 26 08:00:51 [machine name] kernel:  [<ffffffff8020fa49>] __alloc_pages+0x27f/0x308
Sep 26 08:00:51 [machine name] kernel:  [<ffffffff802139c9>] __do_page_cache_readahead+0xc8/0x1af
Sep 26 08:00:51 [machine name] kernel:  [<ffffffff8021423a>] filemap_nopage+0x14c/0x360
Sep 26 08:00:51 [machine name] kernel:  [<ffffffff80208e9d>] __handle_mm_fault+0x444/0x144f
Sep 26 08:00:51 [machine name] kernel:  [<ffffffff80263929>] _spin_lock_irqsave+0x9/0x14
Sep 26 08:00:51 [machine name] kernel:  [<ffffffff8023f468>] lock_timer_base+0x1b/0x3c
Sep 26 08:00:51 [machine name] kernel:  [<ffffffff80266d94>] do_page_fault+0xf72/0x131b
Sep 26 08:00:51 [machine name] kernel:  [<ffffffff802e5f4f>] sys_io_getevents+0x311/0x359
Sep 26 08:00:51 [machine name] kernel:  [<ffffffff802e4e56>] timeout_func+0x0/0x10
Sep 26 08:00:51 [machine name] kernel:  [<ffffffff8025f82b>] error_exit+0x0/0x6e
Sep 26 08:00:51 [machine name] kernel:
Sep 26 08:00:51 [machine name] kernel: Mem-info:
Sep 26 08:00:51 [machine name] kernel: DMA per-cpu:
Sep 26 08:00:51 [machine name] kernel: cpu 0 hot: high 0, batch 1 used:0
Sep 26 08:00:51 [machine name] kernel: cpu 0 cold: high 0, batch 1 used:0
Sep 26 08:00:51 [machine name] kernel: DMA32 per-cpu:
Sep 26 08:00:51 [machine name] kernel: cpu 0 hot: high 186, batch 31 used:117
Sep 26 08:00:51 [machine name] kernel: cpu 0 cold: high 62, batch 15 used:53
Sep 26 08:00:51 [machine name] kernel: Normal per-cpu: empty
Sep 26 08:00:51 [machine name] kernel: HighMem per-cpu: empty
Sep 26 08:00:51 [machine name] kernel: Free pages:        7256kB (0kB HighMem)
Sep 26 08:00:51 [machine name] kernel: Active:241649 inactive:0 dirty:0 writeback:0 unstable:0 free:1814 slab:4104 mapped-file:1153 mapped-anon:240592 pagetables:3298
Sep 26 08:00:51 [machine name] kernel: DMA free:3268kB min:32kB low:40kB high:48kB active:0kB inactive:0kB present:9068kB pages_scanned:0 all_unreclaimable? yes
Sep 26 08:00:51 [machine name] kernel: lowmem_reserve[]: 0 994 994 994
Sep 26 08:00:51 [machine name] kernel: DMA32 free:3988kB min:4016kB low:5020kB high:6024kB active:966596kB inactive:0kB present:1018080kB pages_scanned:6327262 all_unreclaimable? yes
Sep 26 08:00:52 [machine name] kernel: lowmem_reserve[]: 0 0 0 0
Sep 26 08:00:52 [machine name] kernel: Normal free:0kB min:0kB low:0kB high:0kB active:0kB inactive:0kB present:0kB pages_scanned:0 all_unreclaimable? no
Sep 26 08:00:52 [machine name] kernel: lowmem_reserve[]: 0 0 0 0
Sep 26 08:00:52 [machine name] kernel: HighMem free:0kB min:128kB low:128kB high:128kB active:0kB inactive:0kB present:0kB pages_scanned:0 all_unreclaimable? no
Sep 26 08:00:52 [machine name] kernel: lowmem_reserve[]: 0 0 0 0
Sep 26 08:00:52 [machine name] kernel: DMA: 1*4kB 2*8kB 1*16kB 1*32kB 2*64kB 2*128kB 1*256kB 1*512kB 2*1024kB 0*2048kB 0*4096kB = 3268kB
Sep 26 08:00:52 [machine name] kernel: DMA32: 17*4kB 2*8kB 2*16kB 1*32kB 0*64kB 0*128kB 1*256kB 1*512kB 1*1024kB 1*2048kB 0*4096kB = 3988kB
Sep 26 08:00:52 [machine name] kernel: Normal: empty
Sep 26 08:00:52 [machine name] kernel: HighMem: empty
Sep 26 08:00:52 [machine name] kernel: 1214 pagecache pages
Sep 26 08:00:52 [machine name] kernel: Swap cache: add 0, delete 0, find 0/0, race 0+0
Sep 26 08:00:52 [machine name] kernel: Free swap  = 0kB
Sep 26 08:00:52 [machine name] kernel: Total swap = 0kB
Sep 26 08:00:52 [machine name] kernel: Free swap:            0kB
Sep 26 08:00:52 [machine name] kernel: 262144 pages of RAM
Sep 26 08:00:52 [machine name] kernel: 8320 reserved pages
Sep 26 08:00:52 [machine name] kernel: 22510 pages shared
Sep 26 08:00:52 [machine name] kernel: 0 pages swap cached
Sep 26 08:00:52 [machine name] kernel: Out of memory: Killed process 1371, UID 27, (mysqld).

และบรรทัดที่เกี่ยวข้องกับการรีบูตเวลา 11:42 น.

นอกจากนี้ในการแก้ไข # 2:

ฉันพยายามแสดงความคิดเห็นต่อคำตอบของไมเคิล แต่ฉันวิ่งไปไกลเกินขีด จำกัด ความคิดเห็นของตัวละครดังนั้นฉันจึงตอบที่นี่

ขอบคุณที่คุณตอบไมเคิล ฉันเพิ่งแก้ไขคำถามของฉันเพื่อรวมเนื้อหาของบันทึกระบบของเครื่องเมื่อเกิดการขัดข้อง (CentOS ดูเหมือนจะเรียกบันทึกของระบบ/var/log/messages)

ใช่ทั้ง MySQL และบันทึกระบบปรากฏเกือบเหมือนกันกับคำถามที่คุณเชื่อมโยง และตอนนี้เมื่อคุณพูดถึงมันเป็นที่ชัดเจนว่าmysql restartedข้อความนั้นหมายความว่า MySQL ผิดพลาดไปแล้ว บันทึกระบบระบุว่าเป็นoom_killerกระบวนการที่ได้รับ ในคำตอบก่อนหน้าของคุณคุณเขียน: "ก่อนอื่นเดา: กระบวนการลูก apache ทำงาน amok" ดูเหมือนว่าฉันว่า Apache เป็นผู้ต้องสงสัยที่เห็นได้ชัดที่นี่เช่นกัน

ก่อนหน้านี้ผมพบบทความการเพิ่มประสิทธิภาพ MySQL และ Apache สำหรับหน่วยความจำต่ำการใช้งานส่วน 1 สำหรับการกำหนดค่า Apache ผู้เขียนแนะนำ: "ก่อนอื่น Apache คำสั่งแรกของฉันคือถ้าคุณสามารถหลีกเลี่ยงได้ลอง Lighttpd และ thttpd เป็นทั้ง webservers ไม่จีบดีมากและคุณสามารถเรียกใช้ lighttpd ด้วย PHP แม้ว่าคุณจะ กำลังใช้งานไซต์ที่มีปริมาณมากคุณสามารถเพิ่มประสิทธิภาพได้อย่างจริงจังโดยการส่งเนื้อหาแบบคงที่ (รูปภาพและไฟล์จาวาสคริปต์) ไปยังเซิร์ฟเวอร์ HTTPd ที่เบาและรวดเร็วเช่น Lighttpd "

ฉันกำลังคิดที่จะรับคำแนะนำของผู้เขียนและได้ตกลงกับลูกค้าของฉันว่าในสุดสัปดาห์หน้าฉันจะแทนที่ Apache ด้วย Lighttpd บนเซิร์ฟเวอร์ ฉันหวังว่าจะแก้ปัญหาได้ การใช้เซิร์ฟเวอร์เสมือนสองเครื่องเป็นไปไม่ได้

ฉันไม่คิดว่าการใช้เซิร์ฟเวอร์โอเพ่นซอร์สที่เสถียรและเป็นผู้ใหญ่สองตัวเช่น MySQL และ Apache บนเครื่องเดียวกันโดยมีหน่วยความจำในปริมาณพอสมควรจะเป็นปัญหานี้

คำตอบ:


36

โปรดตรวจสอบคำตอบของฉันไปที่คำถามที่ผ่านมานี้ ฉันเชื่อว่าสถานการณ์เหมือนกัน

อย่าเปลี่ยนการกำหนดค่า MySQL ของคุณ ณ จุดนี้เนื่องจาก MySQL ไม่ใช่ปัญหา - เป็นเพียงอาการของปัญหา ... ซึ่งเป็นสิ่งที่คุณดูเหมือนจะมีระบบที่มีหน่วยความจำขนาดเล็กและพื้นที่สว็อปเป็นศูนย์

เซิร์ฟเวอร์ของคุณไม่หยุดทำงาน"เพราะ"ไม่สามารถจัดสรรหน่วยความจำสำหรับพูลบัฟเฟอร์ได้ เซิร์ฟเวอร์ของคุณหยุดทำงาน ... และจากนั้นไม่สามารถรีสตาร์ทในภายหลังได้เนื่องจากหน่วยความจำระบบไม่พร้อมใช้งาน หน่วยความจำทั้งหมดที่กำหนดค่าไว้สำหรับพูลบัฟเฟอร์ InnoDB ได้รับการร้องขอจากระบบเมื่อเริ่มต้น mysql

เมื่อคุณเห็นข้อความบันทึกนี้ ...

120926 08:00:51 mysqld_safe Number of processes running now: 0

... เซิร์ฟเวอร์ของคุณเสียชีวิตแล้ว หากยังไม่ได้บันทึกสิ่งใดก่อนหน้านี้มันจะไม่บันทึกสิ่งใดเกี่ยวกับความผิดพลาดครั้งแรก บันทึกที่ตามมามาจากหลังจากที่พยายามรีสตาร์ทอัตโนมัติ

ตรวจสอบ syslog ของคุณและคุณควรหาข้อความที่เคอร์เนลไปตามหาโพรเซสเพื่อฆ่าเนื่องจากสภาพหน่วยความจำไม่เพียงพอ

ขั้นตอนที่ 1 อาจเป็นการเพิ่มพื้นที่สว็อปและ / หรือการจัดสรร RAM หากเป็นไปได้

หากไม่สามารถทำได้คุณอาจพิจารณาลดขนาด Innodb-buffer-pool ในการกำหนดค่าของคุณ (ฉันไม่เคยคิดว่าจริง ๆ แล้วฉันได้ยินว่าตัวเองพูดอย่างนั้น) ตราบใดที่ฐานข้อมูลของคุณมีขนาดเล็กและทราฟฟิกของคุณมีขนาดเล็กคุณอาจไม่ต้องการบัฟเฟอร์พูลที่มีขนาดใหญ่ ... และเนื่องจากหน่วยความจำบัฟเฟอร์ InnoDB บัฟเฟอร์ทั้งหมดได้รับการจัดสรรเมื่อเริ่มต้นไม่ว่าจะต้องการหรือไม่ หน่วยความจำของระบบสำหรับสิ่งอื่นที่ต้องการมัน (คำแนะนำ 75% ถึง 80% ของยอดรวม RAM สำหรับการปรับขนาดบัฟเฟอร์พูลจะเป็นจริงเฉพาะหากเซิร์ฟเวอร์ทั้งหมดทุ่มเทให้กับ MySQL)

ขั้นตอนที่ 2 จะเป็นการทบทวนโมเดลการตีของ Apache และสิ่งที่คุณอาจต้องทำแตกต่างกันในการกำหนดค่าเพื่อป้องกันไม่ให้เซิร์ฟเวอร์ของคุณครอบงำ เป็นไปได้ว่าการเติบโตของปริมาณที่ไม่สามารถควบคุมได้หรือข้อกำหนดด้านหน่วยความจำของกระบวนการลูก Apache กำลังเริ่มต้นเหตุการณ์ที่เป็นผลทำให้เคอร์เนลฆ่า MySQL เพื่อพยายามหลีกเลี่ยงความผิดพลาดทั้งหมดของเซิร์ฟเวอร์ทั้งหมด

ขึ้นอยู่กับว่าคุณมีความยืดหยุ่นมากแค่ไหนคุณอาจพิจารณาเครื่องเสมือนสองเครื่องแยกต่างหากสำหรับ Apache และ MySQL

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.