Chyba operačního systému 11 je „Prostředek dočasně nedostupný“. Nejčastější příčinou této chyby při pokusu o vytvoření nového vlákna je to, že jádro procesu vynutilo limit na otevřené popisovače souborů. Druhou nejčastější příčinou je dosažení limitu počtu procesů/vlákna vynuceného jádrem procesu.
Zde jsou zahrnuté faktory:
- Celosystémové limity:sysctl -e fs.file-max &&sysctl -e kernel.threads-max
- Omezení na jednotlivé procesy (v *novém* shellu):ulimit -n, grep nofile /etc/security/limits.conf a ulimit -u, grep nproc /etc/security/limits.conf.
- Nastavení open_files_limit v mysqld (mysql> zobrazuje globální proměnné jako „open_files_limit“;).
- Další nastavení v rámci mysqld, která mohou ovlivnit počet otevřených FD a vláken, která může proces používat (max_connections, thread_cache_size, table_open_cache, table_definition_cache, innodb_open_files atd.)
Za předpokladu, že jsme ve skutečnosti dosáhli limitu otevřených souborů, který je na většině systémů Linux nastaven na 1024 – měli bychom být schopni se tomuto problému vyhnout provedením těchto kroků:
1. Zvýšení explicitního limitu otevřených souborů v mysqld provedením této změny v souboru my.cnf:
[mysqld] # Here X could be (max_connections+table_cache)*3 OR you could simply set it very high, for example 32000 open-files-limit = X
2. Restartujte službu mysqld:
/etc/init.d/mysql restart
Limity NPROC
Pokud se místo toho zdá, že příčinou je limit nproc (CentOS 6 na to dává nízký limit v /etc/security/limits.conf), můžeme limit nproc zvýšit několika různými způsoby.
1. Upravit limity.conf:
Limity pro uživatele mysql můžeme nastavit v souboru limited.conf, například:
mysql soft nproc 10240 mysql hard nproc 40960
Všimněte si, že limited.conf se vztahuje pouze na přihlašovací shelly a neovlivňuje procesy spouštěné init nebo systemd. Jakékoli změny v limitech.conf se budou vztahovat pouze na nová přihlášení, pro zahájení nové relace se musíte odhlásit a přihlásit.
2. Upravte skript mysqld_safe:
Můžeme také jednoduše přidat volání ulimit v horní části skriptu mysqld_safe, například:
$ ulimit -u 40000
3. Použijte obalový skript:
Viz níže uvedený příspěvek o „Jak používat Wrapper Script k nastavení vlastních atributů pro každý proces pro MySQL Server“.
Jak používat Wrapper Script k nastavení vlastních atributů pro každý proces pro MySQL ServerAby se změny projevily, budeme muset restartovat mysqld.