Bekijk Volledige Versie : Hoe ontdek ik waarom mijn MySQL crasht?
Sinds enige tijd valt mijn MySQL regelmatig uit. Eerst was dit heel af en toe, om de paar maanden, maar sinds vorige week ongeveer dagelijks. Hoe begin ik er aan om te ontdekken wat de reden hiervan is en hoe ik dit kan oplossen.
eens kijken in je syslogs om te beginnen zou ik zeggen..
Wat ik in m'n syslog vaak zie terugkomen is
mysqld invoked oom-killer: gfp_mask=0x1201d2, order=0, oomkilladj=0
Pid: 1623, comm: mysqld Not tainted 2.6.24-19-xen #1
- - - Updated - - -
Wat ik in m'n syslog vaak zie terugkomen is
mysqld invoked oom-killer: gfp_mask=0x1201d2, order=0, oomkilladj=0
Pid: 1623, comm: mysqld Not tainted 2.6.24-19-xen #1
Dan heb je te weinig geheugen waardoor mysqld wordt afgeschoten. OOM = Out Of Memory
Je kunt je geheugen uitbreiden of (als je eigenlijk meer dan genoeg zou moeten hebben) proberen uit te vinden waarom er af en toe te weinig geheugen beschikbaar is.
OK, hier is een wat grotere block uit m'n syslog, ik geraak er zelf niet aaan uit. Is het mogelijk hieruit te achterhalen waarom ie out of memory geraakt?
Jun 23 21:18:29 vps528 kernel: [1182363.034605] apache2 invoked oom-killer: gfp_mask=0x1201d2, order=0, oomkilladj=0
Jun 23 21:18:29 vps528 kernel: [1182363.034615] Pid: 26308, comm: apache2 Not tainted 2.6.24-19-xen #1
Jun 23 21:18:29 vps528 kernel: [1182363.034617]
Jun 23 21:18:29 vps528 kernel: [1182363.034618] Call Trace:
Jun 23 21:18:29 vps528 kernel: [1182363.034625] [<ffffffff80275e26>] oom_kill_process+0xf6/0x110
Jun 23 21:18:29 vps528 kernel: [1182363.034628] [<ffffffff802762ae>] out_of_memory+0x19e/0x1e0
Jun 23 21:18:29 vps528 kernel: [1182363.034631] [<ffffffff80278bd9>] __alloc_pages+0x389/0x3c0
Jun 23 21:18:29 vps528 kernel: [1182363.034635] [<ffffffff8027af54>] __do_page_cache_readahead+0x104/0x260
Jun 23 21:18:29 vps528 kernel: [1182363.034637] [<ffffffff8027520e>] filemap_fault+0x2de/0x3e0
Jun 23 21:18:29 vps528 kernel: [1182363.034641] [<ffffffff80281f3a>] __do_fault+0x6a/0x5d0
Jun 23 21:18:29 vps528 kernel: [1182363.034644] [<ffffffff80287551>] handle_mm_fault+0x1d1/0xd60
Jun 23 21:18:29 vps528 kernel: [1182363.034646] [<ffffffff8028a1f6>] __vma_link+0x26/0x50
Jun 23 21:18:29 vps528 kernel: [1182363.034648] [<ffffffff8028ade2>] vma_link+0x82/0x140
Jun 23 21:18:29 vps528 kernel: [1182363.034653] [<ffffffff80473553>] do_page_fault+0x1f3/0x11e0
Jun 23 21:18:29 vps528 kernel: [1182363.034655] [<ffffffff8028c028>] do_mmap_pgoff+0x3a8/0x3d0
Jun 23 21:18:29 vps528 kernel: [1182363.034660] [<ffffffff8033a122>] __up_write+0x22/0x130
Jun 23 21:18:29 vps528 kernel: [1182363.034662] [<ffffffff80471bf7>] error_exit+0x0/0x79
Jun 23 21:18:29 vps528 kernel: [1182363.034664]
Jun 23 21:18:29 vps528 kernel: [1182363.034666] Mem-info:
Jun 23 21:18:29 vps528 kernel: [1182363.034667] DMA per-cpu:
Jun 23 21:18:29 vps528 kernel: [1182363.034670] CPU 0: Hot: hi: 0, btch: 1 usd: 0 Cold: hi: 0, btch: 1 usd: 0
Jun 23 21:18:29 vps528 kernel: [1182363.034673] DMA32 per-cpu:
Jun 23 21:18:29 vps528 kernel: [1182363.034676] CPU 0: Hot: hi: 186, btch: 31 usd: 156 Cold: hi: 62, btch: 15 usd: 5
Jun 23 21:18:29 vps528 kernel: [1182363.034680] Active:95932 inactive:393 dirty:0 writeback:0 unstable:0
Jun 23 21:18:29 vps528 kernel: [1182363.034681] free:5128 slab:3420 mapped:1 pagetables:2387 bounce:0
Jun 23 21:18:29 vps528 kernel: [1182363.034686] DMA free:11540kB min:28kB low:32kB high:40kB active:0kB inactive:0kB present:16160kB pages_scanned:0 all_unreclaimable? yes
Jun 23 21:18:29 vps528 kernel: [1182363.034689] lowmem_reserve[]: 0 4024 4024 4024
Jun 23 21:18:29 vps528 kernel: [1182363.034694] DMA32 free:8972kB min:8100kB low:10124kB high:12148kB active:383728kB inactive:1572kB present:4120800kB pages_scanned:658564 all_unreclaimable? yes
Jun 23 21:18:29 vps528 kernel: [1182363.034696] lowmem_reserve[]: 0 0 0 0
Jun 23 21:18:29 vps528 kernel: [1182363.034699] DMA: 3*4kB 3*8kB 3*16kB 4*32kB 3*64kB 1*128kB 1*256kB 1*512kB 2*1024kB 0*2048kB 2*4096kB = 11540kB
Jun 23 21:18:29 vps528 kernel: [1182363.034707] DMA32: 266*4kB 0*8kB 2*16kB 1*32kB 0*64kB 1*128kB 0*256kB 1*512kB 1*1024kB 1*2048kB 1*4096kB = 8936kB
Jun 23 21:18:29 vps528 kernel: [1182363.034715] Swap cache: add 0, delete 0, find 0/0, race 0+0
Jun 23 21:18:29 vps528 kernel: [1182363.034716] Free swap = 0kB
Jun 23 21:18:29 vps528 kernel: [1182363.034717] Total swap = 0kB
Jun 23 21:18:29 vps528 kernel: [1182363.034719] Free swap: 0kB
Jun 23 21:18:29 vps528 kernel: [1182363.044250] 1048576 pages of RAM
Jun 23 21:18:29 vps528 kernel: [1182363.044260] 21255 reserved pages
Jun 23 21:18:29 vps528 kernel: [1182363.044262] 20189 pages shared
Jun 23 21:18:29 vps528 kernel: [1182363.044264] 0 pages swap cached
Jun 23 21:18:29 vps528 kernel: [1182363.044267] Out of memory: kill process 25278 (apache2) score 73738 or a child
Jun 23 21:18:29 vps528 kernel: [1182363.044280] Killed process 25278 (apache2)
Jun 23 21:18:31 vps528 /USR/SBIN/CRON[26334]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jun 23 21:19:01 vps528 kernel: [1182395.730776] mysqld invoked oom-killer: gfp_mask=0x1201d2, order=0, oomkilladj=0
Jun 23 21:19:01 vps528 kernel: [1182395.730789] Pid: 13220, comm: mysqld Not tainted 2.6.24-19-xen #1
Jun 23 21:19:01 vps528 kernel: [1182395.730791]
Jun 23 21:19:01 vps528 kernel: [1182395.730792] Call Trace:
Jun 23 21:19:01 vps528 kernel: [1182395.730802] [<ffffffff80275e26>] oom_kill_process+0xf6/0x110
Jun 23 21:19:01 vps528 kernel: [1182395.730806] [<ffffffff802762ae>] out_of_memory+0x19e/0x1e0
Jun 23 21:19:01 vps528 kernel: [1182395.730810] [<ffffffff80278bd9>] __alloc_pages+0x389/0x3c0
Jun 23 21:19:01 vps528 kernel: [1182395.730815] [<ffffffff8027af54>] __do_page_cache_readahead+0x104/0x260
Jun 23 21:19:01 vps528 kernel: [1182395.730818] [<ffffffff8027520e>] filemap_fault+0x2de/0x3e0
Jun 23 21:19:01 vps528 kernel: [1182395.730822] [<ffffffff80281f3a>] __do_fault+0x6a/0x5d0
Jun 23 21:19:01 vps528 kernel: [1182395.730824] [<ffffffff80287551>] handle_mm_fault+0x1d1/0xd60
Jun 23 21:19:01 vps528 kernel: [1182395.730829] [<ffffffff80229f63>] set_next_entity+0x23/0x50
Jun 23 21:19:01 vps528 kernel: [1182395.730835] [<ffffffff80473553>] do_page_fault+0x1f3/0x11e0
Jun 23 21:19:01 vps528 kernel: [1182395.730840] [<ffffffff8046f7e9>] thread_return+0x3a/0x481
Jun 23 21:19:01 vps528 kernel: [1182395.730845] [<ffffffff80471bf7>] error_exit+0x0/0x79
Jun 23 21:19:01 vps528 kernel: [1182395.730848]
Jun 23 21:19:01 vps528 kernel: [1182395.730850] Mem-info:
Jun 23 21:19:01 vps528 kernel: [1182395.730851] DMA per-cpu:
Jun 23 21:19:01 vps528 kernel: [1182395.730853] CPU 0: Hot: hi: 0, btch: 1 usd: 0 Cold: hi: 0, btch: 1 usd: 0
Jun 23 21:19:01 vps528 kernel: [1182395.730855] DMA32 per-cpu:
Jun 23 21:19:01 vps528 kernel: [1182395.730857] CPU 0: Hot: hi: 186, btch: 31 usd: 172 Cold: hi: 62, btch: 15 usd: 14
Jun 23 21:19:01 vps528 kernel: [1182395.730861] Active:94084 inactive:618 dirty:0 writeback:0 unstable:0
Jun 23 21:19:01 vps528 kernel: [1182395.730861] free:4898 slab:3594 mapped:0 pagetables:3925 bounce:0
Jun 23 21:19:01 vps528 kernel: [1182395.730866] DMA free:11540kB min:28kB low:32kB high:40kB active:0kB inactive:0kB present:16160kB pages_scanned:0 all_unreclaimable? yes
Jun 23 21:19:01 vps528 kernel: [1182395.730869] lowmem_reserve[]: 0 4024 4024 4024
Jun 23 21:19:01 vps528 kernel: [1182395.730875] DMA32 free:8052kB min:8100kB low:10124kB high:12148kB active:376336kB inactive:2472kB present:4120800kB pages_scanned:767723 all_unreclaimable? yes
Jun 23 21:19:01 vps528 kernel: [1182395.730878] lowmem_reserve[]: 0 0 0 0
Jun 23 21:19:01 vps528 kernel: [1182395.730881] DMA: 3*4kB 3*8kB 3*16kB 4*32kB 3*64kB 1*128kB 1*256kB 1*512kB 2*1024kB 0*2048kB 2*4096kB = 11540kB
Jun 23 21:19:01 vps528 kernel: [1182395.730900] DMA32: 62*4kB 4*8kB 3*16kB 4*32kB 2*64kB 0*128kB 1*256kB 0*512kB 1*1024kB 1*2048kB 1*4096kB = 8008kB
Jun 23 21:19:01 vps528 kernel: [1182395.730908] Swap cache: add 0, delete 0, find 0/0, race 0+0
Jun 23 21:19:01 vps528 kernel: [1182395.730910] Free swap = 0kB
Jun 23 21:19:01 vps528 kernel: [1182395.730911] Total swap = 0kB
Jun 23 21:19:01 vps528 kernel: [1182395.730912] Free swap: 0kB
Jun 23 21:19:01 vps528 kernel: [1182395.740886] 1048576 pages of RAM
Jun 23 21:19:01 vps528 kernel: [1182395.740893] 21255 reserved pages
Jun 23 21:19:01 vps528 kernel: [1182395.740894] 39897 pages shared
Jun 23 21:19:01 vps528 kernel: [1182395.740895] 0 pages swap cached
Jun 23 21:19:01 vps528 kernel: [1182395.740898] Out of memory: kill process 25246 (apache2) score 73450 or a child
Jun 23 21:19:01 vps528 kernel: [1182395.740913] Killed process 25246 (apache2)
Ik zou eens via TOP kijken wat er zoal draait en wat er bovenaan staat ...
Aangezien TOP constant veranderd, hoe weet ik dan wat het juist is?
mysqld staat daar regelmatig bij, maar lijkt niet boven 10.7 %MEM te gaan
apache2 komt er ook veel in voor en gaat soms tot 30 %MEM, alhoewel dat wat moeilijk te zien is aangezien er verschillende processen bezig zijn
top - 14:17:47 up 15 days, 9:41, 2 users, load average: 0.13, 0.30, 0.42
Tasks: 58 total, 1 running, 57 sleeping, 0 stopped, 0 zombie
Cpu(s): 19.7%us, 2.7%sy, 0.0%ni, 77.6%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 524508k total, 415200k used, 109308k free, 0k buffers
Swap: 0k total, 0k used, 0k free, 72404k cached
Hier een stukje uit my.cnf, is het zinvol hier wat aan te veranderen? Lijkt dat die nog op standaard waarden staan.
# * Fine Tuning
#
key_buffer = 16M
max_allowed_packet = 16M
thread_stack = 192K
thread_cache_size = 8
Of is heeft mijn VPS pakket gewoon onvoldoende memory voor hetgeen er op draait?
Tweaken zal niet veel uithalen vrees ik aangezien je apache en mysql een out of memory gegeven en je maar 512MB ram en geen swap hebt. Dit zal hoogst waarschijnlijk in jouw geval betekenen dat je effectief te weinig geheugen hebt voor je applicaties. Misschien dat je even kunt meedelen wat er precies op die server draait.
Er staan een tiental websites op, maar bijna allemaal met zeer weinig of geen trafiek. Meeste zijn Drupal, enkele Wordpress en en paar custom made. Met geen trafiek bedoel ik dat het websites zijn die in test staan en waarvan de url dus niet publiek is, waardoor ze geen bezoekers krijgen.
Kan je de hele my.cnf posten?
512 MB zit je vrij snel overheen. Een Apache proces kan makkelijk 40 MB gebruiken, dus als je 10 processen open hebt staan, zit je al op 400 MB. Dan heb je nog maar iets meer dan 100 MB over voor al je andere dingen, waaronder MySQL. Een klein piekje kan er al voor zorgen dat je dit probleem krijgt.
Ik zou gewoon een VPS zoeken met fors meer geheugen en het liefst ook een beetje swapspace.
Kevin Bentlage
25/06/13, 16:58
Treden de problemen rond dezelfde tijden op? Of is het random? Je hebt toevallig geen zware cronjobs draaien die je mysql flink belasten met grote / zware queries?
Of is heeft mijn VPS pakket gewoon onvoldoende memory voor hetgeen er op draait?
512 MB is niet erg ruim. Afhankelijk van de kosten zou ik een upgrade naar 1 GB zeker overwegen, dat geeft je veel meer ademruimte. Wat je in ieder geval zou moeten doen is een swapfile of -partitie toevoegen: er worden dan in ieder geval minder snel processen afgeschoten. Merk op dat gebruik van swap op een VPS vaak wel behoorlijk traag is (afhankelijk van het storage-platform waar je op draait).
my.cnf:
#
# The MySQL database server configuration file.
#
# You can copy this to one of:
# - "/etc/mysql/my.cnf" to set global options,
# - "~/.my.cnf" to set user-specific options.
#
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html
# This will be passed to all mysql clients
# It has been reported that passwords should be enclosed with ticks/quotes
# escpecially if they contain "#" chars...
# Remember to edit /etc/mysql/debian.cnf when changing the socket location.
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
# Here is entries for some specific programs
# The following values assume you have at least 32M ram
# This was formally known as [safe_mysqld]. Both versions are currently parsed.
[mysqld_safe]
socket = /var/run/mysqld/mysqld.sock
nice = 0
[mysqld]
#
# * Basic Settings
#
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
language = /usr/share/mysql/english
skip-external-locking
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 127.0.0.1
#
# * Fine Tuning
#
key_buffer = 16M
max_allowed_packet = 16M
thread_stack = 192K
thread_cache_size = 8
# This replaces the startup script and checks MyISAM tables if needed
# the first time they are touched
myisam-recover = BACKUP
#max_connections = 100
#table_cache = 64
#thread_concurrency = 10
#
# * Query Cache Configuration
#
query_cache_limit = 1M
query_cache_size = 16M
#
# * Logging and Replication
#
# Both location gets rotated by the cronjob.
# Be aware that this log type is a performance killer.
# As of 5.1 you can enable the log at runtime!
#general_log_file = /var/log/mysql/mysql.log
#general_log = 1
#
# Error logging goes to syslog due to /etc/mysql/conf.d/mysqld_safe_syslog.cnf.
#
# Here you can see queries with especially long duration
log_slow_queries = /var/log/mysql/mysql-slow.log
long_query_time = 2
log-queries-not-using-indexes
#
# The following can be used as easy to replay backup logs or for replication.
# note: if you are setting up a replication slave, see README.Debian about
# other settings you may need to change.
#server-id = 1
#log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 10
max_binlog_size = 100M
#binlog_do_db = include_database_name
#binlog_ignore_db = include_database_name
#
# * InnoDB
#
# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
# Read the manual for more InnoDB related options. There are many!
#
# * Security Features
#
# Read the manual, too, if you want chroot!
# chroot = /var/lib/mysql/
#
# For generating SSL certificates I recommend the OpenSSL GUI "tinyca".
#
# ssl-ca=/etc/mysql/cacert.pem
# ssl-cert=/etc/mysql/server-cert.pem
# ssl-key=/etc/mysql/server-key.pem
[mysqldump]
quick
quote-names
max_allowed_packet = 16M
[mysql]
#no-auto-rehash # faster start of mysql but no tab completition
[isamchk]
key_buffer = 16M
#
# * IMPORTANT: Additional settings that can override those from this file!
# The files must end with '.cnf', otherwise they'll be ignored.
#
!includedir /etc/mysql/conf.d/
Ik heb mijn cron jobs ingesteld met telkens 5 minuten er tussen, dat zijn Drupal cron.php jobs.
Ik ben van plan te upgraden naar 1GB VPS. En zal ook eens kijken hoe ik swap instel.
- - - Updated - - -
Ik ben van plan te upgraden naar 1GB VPS. En zal ook eens kijken hoe ik swap instel.
patrickekkel
25/06/13, 21:29
Ik ben van plan te upgraden naar 1GB VPS. En zal ook eens kijken hoe ik swap instel.
- - - Updated - - -
Ik ben van plan te upgraden naar 1GB VPS. En zal ook eens kijken hoe ik swap instel.
Gezien het feit dat je geen swap hebt ga ik er vanuit dat je een openvz vps hebt.
Wil je swap zou ik toch gaan kijken naar een vps die geen gebruik maakt van openvz
dennis0162
25/06/13, 21:57
OpenVZ heeft wel support voor swap vanaf Rhel 6 (vSWAP).
Om het aan te zetten indien mogelijk moet je contact opnemen met je hoster.
Gezien het feit dat je geen swap hebt ga ik er vanuit dat je een openvz vps hebt.
Wil je swap zou ik toch gaan kijken naar een vps die geen gebruik maakt van openvz
En waarom ga je daarvan uit, je kan gelijk welke server opleveren zonder swap, dat hangt gewoon van je installatie en partities af.
Trouwens moest je de syslog goed gelezen hebben zou je gezien hebben dat hij een xen kernel gebruikt ;):
Jun 23 21:18:29 vps528 kernel: [1182363.034615] Pid: 26308, comm: apache2 Not tainted 2.6.24-19-xen #1
crossplatform
26/06/13, 08:27
Persoonlijk ben ik ook geen fan van swap op virtuele servers. Zeker als je gebruik maak van een storage backend.
Zorgt voor meer schrijf traffic naar je backend met als uiteindelijk resultaat een tragere omgeving voor jouw vps en die van je klanten.
Ik zou de vps in een wat ruimer jasje zetten qua virtueel geheugen.
NixDevs.com
26/06/13, 10:27
Als je echt swap wil gaan gebruiken kun je dit ook gewoon op een directory knallen op je FS.. Hoeft zeker niet een aparte partitie voor te zijn.
dd if=/dev/zero of=/swapfile bs=1024 count=1048576
mkswap /swapfile
swapon /swapfile
Persoonlijk ben ik ook geen fan van swap op virtuele servers. Zeker als je gebruik maak van een storage backend.
Zorgt voor meer schrijf traffic naar je backend met als uiteindelijk resultaat een tragere omgeving voor jouw vps en die van je klanten.
Ik zou de vps in een wat ruimer jasje zetten qua virtueel geheugen.
Swap kan wel degelijk in het voordeel werken, juist met een trage storage backend. Linux heeft namelijk de neiging om dingen die in het geheugen staan, maar bijna niet worden gebruikt, in het swapgeheugen neer te zetten. Hierdoor is er meer geheugen vrij voor buffers en caching, waardoor er minder data van de schijf hoeft te worden gehaald. Hierdoor werkt de VM uiteindelijk gewoon sneller.
Maar meer geheugen is altijd beter natuurlijk, dat spreekt voor zich :)
Persoonlijk ben ik ook geen fan van swap op virtuele servers. Zeker als je gebruik maak van een storage backend.
Zorgt voor meer schrijf traffic naar je backend met als uiteindelijk resultaat een tragere omgeving voor jouw vps en die van je klanten.
Ik zou de vps in een wat ruimer jasje zetten qua virtueel geheugen.
Volg ik je deels in, maar in dit geval is een tragere server misschien beter dan een server die volledig crashed, vooral als het veel voorvalt. Naast het feit dat het de TS misschien kan helpen om te bepalen hoeveel ram hij uiteindelijk nodig zou hebben. Als je naast de 512MB ram bvb maar 100MB swap gebruikt weet je dat je met een 512MB ram upgrade (1GB in totaal) zult toekomen. Als je lang de andere kant ziet dat er 3GB aan swap nodig is, kun je er vanuit gaan dat een upgrade van minimaal 4GB ram totaal nodig is.
systemdeveloper
26/06/13, 22:39
Swap op je vpssen geeft je een totaal onvoorspelbaar io patroon dat je shared storage vaak behoorlijk kan belasten. Voorstander ben ik er niet van dus.
Maar swap heeft wel als voordeel dat je load goed (langer dan bij een OOM) omhoog schiet en het systeem dus tijd heeft om daar lekker over te rapporteren. In dat geval bespaar je weer wat tijd met je af te vragen waarom dingen af en toe crashen :)