SUMMARY While I am fairly certain the problem is with FreeBSD, since this is InnoDB/MySQL related, I thought I would post here to see if others have had this problem. I have googled several different phrases to find this answer -- how does FreeBSD 5 set resource limits, and how do I override them without hard-coding them into a recompiled kernel?
DETAIL I just doubled the amount of memory in my FreeBSD 5.3 box. Celeron (yes, I know) 1.7Ghz, 1GB of memory now. Before I had 512MB of memory, and was able to run MySQL with InnoDB at 384MB innodb_buffer_pool_size. Everything was fine. Now I must admit, I played with my .cnf file a bit between the nicely running 512MB memory and restarting with 1GB, but I don't think that's why I'm having this problem. The box runs only sshd and mysql in addition to processes required for the OS. Currently with mysql running at innodb pool size of 384M, my memory usage on the box as reported by top: Mem: 146M Active, 17M Inact, 114M Wired, 105M Buf, 723M Free Swap: 2048M Total, 2048M Free I have enough memory available it seems. No errors on boot, no o errors in the /var/log(s). I'm quite certain that the error I got was a result of resource limits set by the kernel too low. However, I can't, for the life of me, figure out where they are being set, or by what. My current theory is if I can increase the datasize limits, I can run MySQL with InnoDB Buffer Pool Size of 820M, or about 80% of available memory. ~ --> limits -H (display Hard Limits) Resource limits (current): cputime infinity secs filesize infinity kb datasize 524288 kb stacksize 65536 kb coredumpsize infinity kb memoryuse infinity kb memorylocked infinity kb maxprocesses 5547 openfiles 11095 sbsize infinity bytes vmemoryuse infinity kb Nowhere in login.conf are any user or class limits being set (all are defaulting to infinity). I can't find anything in sysctl that would set my datasize and stacksize to the values set here. My kernel config has no numbers in it -- no max size set; only NMBCLUSTERS at 16384 and a 15 second SCSI delay. I can't find any documentation on how to change hard limits; everything I've read says that FreeBSD 5 modifies those limits at boot "intelligently", and if so, should be able to be set somewhere without recompiling the kernel using sysctl (or something else). I've tried setting it with limits and ulimit (as root): # ulimit -a data seg size (kbytes, -d) 524288 # ulimit -d 524287; ulimit -a data seg size (kbytes, -d) 524287 # ulimit -d 524288; ulimit -a data seg size (kbytes, -d) 524288 # ulimit -d 524289; ulimit -a (also tried with 786432, same result) data seg size (kbytes, -d) 524288 I can set it lower, but I can't set it higher. From dmesg.boot: real memory = 1072627712 (1022 MB) avail memory = 1044291584 (995 MB) The error from mysql: 050823 06:57:16 mysqld started 050823 6:57:17 InnoDB: Error: cannot allocate 859848704 bytes of InnoDB: memory with malloc! Total allocated memory InnoDB: by InnoDB 19166088 bytes. Operating system errno: 12 InnoDB: Check if you should increase the swap file or InnoDB: ulimits of your operating system. InnoDB: On FreeBSD check you have compiled the OS with InnoDB: a big enough maximum process size. InnoDB: We keep retrying the allocation for 60 seconds... InnoDB: Fatal error: cannot allocate the memory for the buffer pool 050823 6:58:17 [ERROR] Can't init databases 050823 6:58:17 [ERROR] Aborting 050823 6:58:17 [Note] /usr/local/libexec/mysqld: Shutdown complete 050823 06:58:17 mysqld ended My Config: [mysqld] max_connections = 100 thread_cache_size = 20 table_cache = 64 max_allowed_packet = 32M sort_buffer_size = 512K read_buffer_size = 256K read_rnd_buffer_size = 512K tmp_table_size = 64M wait_timeout = 900 key_buffer = 16M myisam_sort_buffer_size = 8M innodb_data_home_dir = /usr/local/db/mysql/ innodb_data_file_path = ibdata1:50M:autoextend innodb_log_group_home_dir = /usr/local/db/mysql/ innodb_log_arch_dir = /usr/local/db/mysql/ # was 820M (80% of 1024MB) innodb_buffer_pool_size = 384M innodb_additional_mem_pool_size = 8M innodb_log_file_size = 10M innodb_log_buffer_size = 8M innodb_flush_log_at_trx_commit = 1 query_cache_size = 20M query_cache_limit = 1M long_query_time = 5 log-slow-queries = /var/log/mysql-slow-queries.log My DB specs: ibdata1 is 2.6GB or so, 20 or so tables, couple million rows I would appreciate any help. Beckman --------------------------------------------------------------------------- Peter Beckman Internet Guy [EMAIL PROTECTED] http://www.purplecow.com/ --------------------------------------------------------------------------- -- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]