Redgate Clone

Insufficient async disk I/O kernel resources

In some cases, we have observed containers failing to create with errors referencing a kernel restriction on IO requests. In these cases we have found that raising that limit resolves this issue.

Typical error messages

Database engineTypical error messages
Oracle
ORA-27090: Unable to reserve kernel resources for asynchronous disk I/O
SQL Server
Reason: 0x00000003 
Status: 0x0000000b
Unable to create a new asynchronous I/O context. Please increase sysctl fs.aio-max-nr
Last errno: 11
Last errno text: Resource temporarily unavailable
/usr/bin/find: '/proc/10/map_files': Permission denied 
/usr/bin/find: '/proc/10/task/10/fdinfo': Permission denied
MySQL
[ERROR] [MY-012584] [InnoDB] io_setup() failed with EAGAIN after 5 attempts.
[ERROR] [MY-012954] [InnoDB] Cannot initialize AIO sub-system
[ERROR] [MY-012930] [InnoDB] Plugin initialization aborted with error Generic error.
[ERROR] [MY-010334] [Server] Failed to initialize DD Storage Engine
[ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
[ERROR] [MY-010119] [Server] Aborting

Configuration change

Increasing the sysctl  value fs.aio-max-nr  is the solution recommended by Oracle. You can do this by running the follow command:

sudo sysctl fs.aio-max-nr=1048576

However, in order to persist this change across reboots you will need to edit the /etc/sysctl.conf file and add the line 

fs.aio-max-nr=1048576

You can then run sudo sysctl -p /etc/sysctl.conf to load the change.

You may want to increase or decrease the value as appropriate for the number of containers in use on your node. The value given in our example is the simply Oracle's recommended value.


Didn't find what you were looking for?