Getting regular "fork: Cannot allocate memory" error - on LAMP, 1GB RAM

December 10, 2014 14.3k views

So I havea basic LAMP on Ubuntu setup with ISPConfig installed. I have installed prestashop framework, which apparently kills my server. I know its not the lightest framework but not the heaviest too. My VPS should handle it. But when prestashop makes calls to MYSQL updates, inserts etc it regulary crashes the whole server and I get fork: Cannot allocate memory.
How to setup MYSQL so it wouldn't consume all available RAM?

Here is my.cnf:

# Example MySQL config file for small systems.
# This is for a system with little memory (<= 64M) where MySQL is only used
# from time to time and it's important that the mysqld daemon
# doesn't use much resources.
# MySQL programs look for option files in a set of
# locations which depend on the deployment platform.
# You can copy this option file to one of those
# locations. For information about these locations, see:
# In this file, you can use all long options that a program supports.
# If you want to know which options a program supports, run the program
# with the "--help" option.

# The following options will be passed to all MySQL clients
#password = your_password
port    = 3306
socket    = /var/run/mysqld/mysqld.sock

# Here follows entries for some specific programs

# The MySQL server
port    = 3306
socket    = /var/run/mysqld/mysqld.sock
key_buffer_size = 16K
max_allowed_packet = 1M
table_open_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 128K

# Don't listen on a TCP/IP port at all. This can be a security enhancement,
# if all processes that need to connect to mysqld run on the same host.
# All interaction with mysqld must be made via Unix sockets or named pipes.
# Note that using this option without enabling named pipes on Windows
# (using the "enable-named-pipe" option) will render mysqld useless!
server-id = 1

# Uncomment the following if you want to log updates

# binary logging format - mixed recommended

# Causes updates to non-transactional engines using statement format to be
# written directly to binary log. Before using this option make sure that
# there are no dependencies between transactional and non-transactional
# tables such as in the statement INSERT INTO t_myisam SELECT * FROM
# t_innodb; otherwise, slaves may diverge from the master.

# Uncomment the following if you are using InnoDB tables
innodb_data_home_dir = /var/lib/mysql
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /var/lib/mysql

# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
innodb_buffer_pool_size = 16M
innodb_additional_mem_pool_size = 2M

# Set .._log_file_size to 25 % of buffer pool size
innodb_log_file_size = 5M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50

max_allowed_packet = 16M

# Remove the next comment character if you are not familiar with SQL

key_buffer_size = 8M
sort_buffer_size = 8M


2 Answers

Since droplets do not have swap space enabled by default your processes can exhaust the physical memory and cause this to happen. Aside from upgrading to a larger droplet or optimizing your configurations you can enable a swap file on your droplet which should prevent these crashes. This tutorial will walk you through the process.

by Justin Ellingwood
Swap space can be used as an "overflow" area for your system when you run out of RAM. The operating system can store data that would normally be kept in RAM on the hard drive in a specially formatted file. In this guide, we'll demonstrate how to create and use one of these files in Ubuntu 14.04.

Thanks, added sqap file - the server isn't crashing anymore, although mysql still crashing.. will have to look more into mysql configuration.

Have another answer? Share your knowledge.