Bug #6827 server crashes if innodb_buffer_pool_size set too big
Submitted: 25 Nov 2004 15:32 Modified: 25 Nov 2004 22:47
Reporter: Aleksey Kishkin Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: InnoDB storage engine Severity:S4 (Feature request)
Version:4.1.7 OS:Linux (Linux)
Assigned to: Heikki Tuuri CPU Architecture:Any

[25 Nov 2004 15:32] Aleksey Kishkin
Description:
When I incidentely set innodb_buffer_pool_size to 2G on computer that has 512M RAM and 512M swap, mysql crashed with signal 11 (SIGSEGV).

Computer obviously cannot provide such amount of memory that mysqld demanded, but I think server must handle somehow this situation. Probably it must warn and use default low value of innodb_buffer_pool_size. 

How to repeat:
run mysql server on low memory computer with my.cnf  that contains

[mysqld]
innodb_buffer_pool_size = 2G
[25 Nov 2004 15:52] Heikki Tuuri
Aleksey,

please show the FULL output of mysqld. Do not cut anything off.

Regards,

Heikki
[25 Nov 2004 16:06] Aleksey Kishkin
error log

Attachment: walrus.err (application/octet-stream, text), 2.17 KiB.

[25 Nov 2004 16:12] Aleksey Kishkin
sure. I attached .err file and my.cnf. Server that I used is our standard mysql, downloaded from dev.mysql.com: 
mysql-standard-4.1.7-pc-linux-i686.tar.gz

resolve_stack_dump shows following: 

0x808af93 handle_segfault + 423
0x82d6de8 pthread_sighandler + 184
0x826cb12 ut_malloc_low + 146
0x826cb98 ut_malloc + 20
0x81e5f04 buf_pool_init + 1388
0x813b027 innobase_start_or_create_for_mysql + 1375
0x80fbb74 innobase_init__Fv + 1104
0x80f4a7f ha_init__Fv + 23
0x808c1a8 init_server_components__Fv + 808
0x808c51a main + 494
0x82deed4 __libc_start_main + 212
0x8048101 _start + 33
[25 Nov 2004 16:12] Aleksey Kishkin
config file

Attachment: my.cnf (application/octet-stream, text), 38 bytes.

[25 Nov 2004 16:24] Heikki Tuuri
Walrus,

not able to allocate enough memory is a fatal error. Like it says in the .err log, we crash the server and print the stack trace to get debug information.

Regards,

Heikki
[25 Nov 2004 17:19] Sergei Golubchik
Heikki, not able to allocate enough memory is a fatal error.

Nevertheless it should not crash but return an error. MySQL then will exit gracefully.
[25 Nov 2004 17:29] Heikki Tuuri
Hi!

I am changing this to a feature request.

If we know that out-of-memory is an expected condition, and NOT a result of some unknown bug, then mysqld should exit gracefully, and not print a stack trace.

Regards,

Heikki
[25 Nov 2004 22:47] Heikki Tuuri
-------------------------------------------------
Many files:
  Fix bug #6817 and bug #6827 : do not crash the server if the buffer pool becom
es filled by the locks of ONE huge transaction, return error 1206 instead; do no
t crash the server, but return error if we cannot allocate memory for the buffer
 pool at a mysqld startup
-------------------------------------------------

If memory runs out at some other place, then we still crash mysqld to get the stack trace.

Thank you,

Heikki
[25 Nov 2004 22:48] Heikki Tuuri
Forgot to mention that the fix is in 4.1.8.

--Heikki