Не могу увеличить max_open_files для mysql max-соединений в ubuntu 15

Новые изменения настройки my.cnf в 2021 году

Времена идут, знания становятся лучше, поэтому я уже практически во многом перенастроил свои файлы конфигов базы данных. Сразу скажу, что в основном этот конфиг рассчитан по моим базам данных, это порядка 14 гигабайт данных на серверах с 32 памяти оперативной, ssd дисками и собственно выкручено все на соотношение скорость работы + стабильность. Поэтому вот такой конфиг сейчас использую на Centos 8 с указанными параметрами серверов.

PHP

collation-server = utf8_general_ci
character-set-server = utf8
local-infile=0
innodb_file_per_table = 1
skip-log-bin = true
symbolic-links=0
skip-external-locking
skip-name-resolve
max-connect-errors = 1000
low-priority-updates=1
max_allowed_packet = 32M
open_files_limit = 165536
key_buffer_size = 512m
max_connections = 150
thread-cache-size = 150
wait_timeout = 90
interactive_timeout = 90
innodb_buffer_pool_instances = 16
innodb_buffer_pool_size = 16G
innodb_thread_concurrency = 32
innodb_flush_log_at_trx_commit = 0
innodb_flush_method = O_DIRECT
innodb-log-files-in-group = 2
innodb_log_file_size = 2g
innodb_log_buffer_size = 16M

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

collation-server=utf8_general_ci

character-set-server=utf8

local-infile=

innodb_file_per_table=1

skip-log-bin=true

symbolic-links=

skip-external-locking

skip-name-resolve

max-connect-errors=1000

low-priority-updates=1

max_allowed_packet=32M

open_files_limit=165536

key_buffer_size=512m

max_connections=150

thread-cache-size=150

wait_timeout=90

interactive_timeout=90

innodb_buffer_pool_instances=16

innodb_buffer_pool_size=16G

innodb_thread_concurrency=32

innodb_flush_log_at_trx_commit=

innodb_flush_method=O_DIRECT

innodb-log-files-in-group=2

innodb_log_file_size=2g

innodb_log_buffer_size=16M

В принципе производительность и уровень работы меня устраивает. Если у вас есть вопросы или конфигурация сервера другая, желательно написать все таки вопрос, я помогу разобраться какие параметры следует учесть. Из основного: сделан упор на работу Innodb + конфиги учитывают максимально настройки устраняющие узкие места в работе базы данных.

Перенос временных файлов MySQL в память

Проверяем наличие /dev/shm:

df -h

1 df-h

Настройки размещаются в , рекомендуем указать размер, например, 1G:

none /dev/shm tmpfs defaults,size=1G 0 0

1 nonedevshm        tmpfs   defaults,size=1G

Если внесли изменения, то перемонтируем:

mount -o remount /dev/shm

1 mount-oremountdevshm

В конфигурационном файле указываем:

tmpdir = /dev/shm

1 tmpdir=devshm

В случае, если используется Apparmor, то внесите используемый путь (/dev/shm или /run/mysql) в конфигурационный файл /etc/apparmor.d/usr.sbin.mysqld, например:

/run/mysql/* rw,

1 runmysql*rw,

Затем перезапустите:

service apparmor restart

1 service apparmor restart

Параметры MySQL

key_buffer

Изменение выделяет больше памяти MySQL, что существенно ускоряет работу базы данных при условии наличия свободной памяти. Размер обычно должен занимать не более 25% системной памяти при использовании MyISAM и до 70% для InnoDB. Если значение установлено слишком высоко, ресурсы расходуются впустую.

Согласно документации MySQL, для серверов с 256MB (или более) ОЗУ с множеством таблиц рекомендуется настройка 64M. Серверы с 128MB ОЗУ и меньшим количеством таблиц могут быть настроены на 16M — это значение по умолчанию. Веб-сайты с еще меньшим числом ресурсов и таблиц могут быть ограничены даже меньшим объемом.

max_allowed_packet

Этот параметр позволяет задать максимальный размер отправляемого пакета. Если известно, что MySQL-сервер будет обрабатывать большие пакеты, лучше увеличить их до размера самого большого пакета. Если это значение будет слишком маленьким, в журнале ошибок появится ошибка.

thread_stack

Это значение содержит размер стека для каждого треда. MySQL считает значение переменной по умолчанию достаточным для нормального использования. Однако в случае регистрации ошибки, связанной с , оно может быть увеличено.

thread_cache_size

Этот параметр указывает количество тредов, которые уходят в кеш при отключении клиента. При новом подключении тред используется из кеша, что позволяет экономить ресурсы при значительных нагрузках.

max_connections

Этот параметр задает максимальное количество одновременных подключений. Прежде чем задавать это число, лучше всего учитывать максимальное количество подключений, которые были в прошлом, следовательно у вас будет буфер между верхним числом подключений и значением

Следует обратить внимание на то, что этот параметр не указывает максимальное количество пользователей на сайте. Вместо этого отображается максимальное количество пользователей, одновременно делающих запросы

table_cache

Это значение должно быть больше, чем значение . Для определения этого значения используйте:

С полным перечнем анализируемых параметров можно ознакомиться здесь.

Исходные данные для настройки

Итак рассматриваем систему с установленным ISP manager на котором стоит Centos и MariaDB. Задача, оптимизировать работу Mysql и ускорить тем самым обработку запросов на сайтах. Для начала я приведу, пример своего my.cnf который находится по адресу etc/my.cnf, если у вас стоит Debian то смотреть надо в папке другой. Итак вот так выглядит настроенный файл, но иногда я все таки еще изменяю некоторые настройки, о которых расскажу ниже.

PHP

#open_files_limit = 2000
local-infile=0
innodb_file_per_table = 1
pid-file = /var/run/mysqld/mysqld.pid
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
ignore-db-dir=lost+found
max_allowed_packet = 1024M
skip-external-locking
skip-name-resolve
key_buffer = 2G

key_cache_division_limit = 70
thread_stack = 192K
tmp_table_size = 2G
max_heap_table_size = 2G
key_buffer_size = 4G
sort_buffer_size    = 1G
read_buffer_size    = 1G
read_rnd_buffer_size = 2G

myisam-recover = BACKUP
max_connections = 500
table-cache = 120000
table-open-cache = 120000

thread-cache-size = 500
thread-cache-size = 500
interactive-timeout = 360
query_cache_limit = 12M
query_cache_size    = 4G
join_buffer_size = 512M

#log_slow_queries = /var/log/mysql/mysql-slow.log

expire_logs_days = 10
max_binlog_size         = 100M
innodb_buffer_pool_size = 4G
innodb_buffer_pool_instances = 4
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
symbolic-links=0
bind-address = 127.0.0.1

log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

!includedir /etc/my.cnf.d

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52

mysqld

#open_files_limit = 2000

local-infile=

innodb_file_per_table=1

pid-file=varrunmysqldmysqld.pid

datadir=varlibmysql

socket=varlibmysqlmysql.sock

ignore-db-dir=lost+found

max_allowed_packet=1024M

skip-external-locking

skip-name-resolve

key_buffer=2G

key_cache_division_limit=70

thread_stack=192K

tmp_table_size=2G

max_heap_table_size=2G

key_buffer_size=4G

sort_buffer_size  =1G

read_buffer_size  =1G

read_rnd_buffer_size=2G

myisam-recover=BACKUP

max_connections=500

table-cache=120000

table-open-cache=120000

thread-cache-size=500

thread-cache-size=500

interactive-timeout=360

query_cache_limit=12M

query_cache_size  =4G

join_buffer_size=512M

 
 
#log_slow_queries = /var/log/mysql/mysql-slow.log
 

expire_logs_days=10

max_binlog_size    =100M

innodb_buffer_pool_size=4G

innodb_buffer_pool_instances=4

innodb_flush_log_at_trx_commit=2

innodb_flush_method=O_DIRECT

symbolic-links=

bind-address=127.0.0.1

mysqld_safe

log-error=varlogmariadbmariadb.log

pid-file=varrunmariadbmariadb.pid

!includediretcmy.cnf.d

Тюнинг базы данных Mysql варианты

Итак что я меняю и что вижу при этом. Для начала выведу основные параметры которые считаю спорными в настройке.

PHP

key_buffer = 2G
key_cache_division_limit = 70
thread_stack = 192K
tmp_table_size = 1G
max_heap_table_size = 1G
key_buffer_size = 4G
sort_buffer_size    = 1G
read_buffer_size    = 1G
read_rnd_buffer_size = 2G
myisam-recover         = BACKUP

max_connections        = 500
table-cache = 120000
table-open-cache = 120000
thread-cache-size = 500
interactive-timeout = 360
query_cache_limit = 12M
query_cache_size    = 4G
join_buffer_size = 512M

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

key_buffer=2G

key_cache_division_limit=70

thread_stack=192K

tmp_table_size=1G

max_heap_table_size=1G

key_buffer_size=4G

sort_buffer_size  =1G

read_buffer_size  =1G

read_rnd_buffer_size=2G

myisam-recover    =BACKUP

max_connections    =500

table-cache=120000

table-open-cache=120000

thread-cache-size=500

interactive-timeout=360

query_cache_limit=12M

query_cache_size  =4G

join_buffer_size=512M

Настройка MySQL

При изменении конфигурации MySQL следует внимательно относиться к изменениям и их влиянию на базу данных. Даже при выполнении инструкций таких программ, как MySQLTuner, лучше иметь некоторое понимание процесса.

С порядком анализа можно ознакомиться .

Конфигурационный файл MySQL хранится в директории:

Для CentOS:

В этот файл могут быть внесены изменения, основанные на рекомендациях MySQLTuner в пункте Variables to adjust секции Recommendations. Если какого-либо параметра нет в файле my.cnf, допишите его.

После внесения изменений в my.cnf перезагрузите MySQL-сервер:

  • Debian/Ubuntu и CentOS 6:

  • CentOS 7:

Обратите внимание! Прежде чем проводить обновление конфигурации MySQL, желательно создать бэкап. Для наиболее эффективного использования возможностей MySQLTuner желательно производить небольшие изменения за раз, а затем проводить повторный анализ

Таким итеративным способом можно будет добиться наилучших результатов при настройке MySQL

Для наиболее эффективного использования возможностей MySQLTuner желательно производить небольшие изменения за раз, а затем проводить повторный анализ. Таким итеративным способом можно будет добиться наилучших результатов при настройке MySQL.

При этом, для того чтобы данные были корректны, необходимо, чтобы сервер MySQL проработал не менее 24 часов без перезагрузок и смены параметров конфигурации перед следующим анализом.

Установка

  1. Скачайте MySQLTuner:

    Для удобства можно воспользоваться штатными репозиториями и установить MySQLTuner.

    Для Debian/Ubuntu:

    Для CentOS:

  2. Разрешите выполнение скрипта:

  3. Запустите скрипт mysqltuner.pl. Вам будет предложено ввести имя пользователя и пароль администратора MySQL:

    Если производилось скачивание скрипта:

    Если производилась установка:

  4. Если возникла ошибка:

    Запустите с с ключом :

  5. Скрипт вернет результаты анализа, аналогичные представленным ниже:

MySQLTuner предлагает способы повышения производительности базы данных. Если самостоятельно обновить конфигурацию базы данных затруднительно, то выполнение рекомендаций MySQLTuner является одним из безопасных способов повышения производительности.

4 ответа

Лучший ответ

Ubuntu перешла с Upstart на Systemd в версии 15.04 и больше не соблюдает ограничения в /etc/security/limits.conf для системных служб. Эти ограничения теперь применяются только к пользовательским сеансам.

Ограничения для службы MySQL определены в файле конфигурации Systemd, который вы должны скопировать из его расположения по умолчанию в / etc / systemd, а затем отредактировать копию.

Добавьте следующие строки в конец файла:

Вы также можете установить числовой предел, например .

Теперь перезагрузите конфигурацию Systemd с помощью:

Перезапустите MySQL, и теперь он должен подчиняться директиве max_connections.

У меня также были проблемы с чистой остановкой MySQL после обновления до 15.04. Если это повлияет на вас (вы будете знать, потому что время ожидания займет 300 секунд, когда вы сделаете или ), добавьте следующую строку в тот же файл / etc / systemd / system / mysql. служебный файл исправил это для меня:

Эта последняя проблема, похоже, была исправлена ​​к 16.04, и эта строка больше не требуется, поэтому перед обновлением дистрибутива вы захотите остановить MySQL и удалить строку из файла конфигурации.

84

Matt Raines
10 Окт 2016 в 08:57

С systemd файл override.conf не нужно искать или, возможно, создавать. Просто используйте следующую команду:

Если файл override.conf существует, он читается, в противном случае его можно создать сейчас.

Остальное, как писал Фредерик: Введите LimitNOFILE и перезапустите службы.

3

amalesh
29 Янв 2020 в 11:00

Я предлагаю вам не копировать существующий файл mysql.service, как предлагается, просто создать файл только с теми изменениями, которые вам нужны. Ну действуй:

А содержимое limits.conf просто:

Или какие ограничения вы предпочитаете.

8

Berend de Boer
7 Дек 2016 в 23:18

Начиная с MySQL 5.7.7, это то, что документация рекомендует для Red Hat Enterprise Linux 7, Oracle Linux 7, CentOS 7, SUSE Linux Enterprise Server 12, Fedora 24 и 25:

В Ubuntu 16.04 служба называется mysql, а не mysqld, поэтому я сделал следующее:

Это добавлено в новый файл override.conf:

Затем перезапустили службу:

18

Fredrik
28 Янв 2017 в 06:11

Общие настройки

max_connections=64 — устанавливаем параметр минимальным возможным при необходимости экономить ресурсы сервера, при возникновении в логе записей вида «Too many connections…» увеличиваем значение. Не следует изменять значение этого параметра на старте. 4000 клиентов является максимумом. Можно довести максимальное количество клиентов до 7000, но для стандартных сборок 4000 является пределом.

open_files_limit = 2048 Устанавливать значение стоит опираясь на существующее количество открытых файлов MySQL:

В конфигурационном файле задается большее значение.

connect_timeout (MySQL pre-5.1.23: default 5, MySQL 5.1.23+: default 10) — количество секунд по прошествии которых сервер баз данных будет выдавать ошибку, при активном веб-сервере значение можно уменьшать чтобы увеличить скорость работы, на медленной машине — можно увеличивать. max_connect_errors (default 10) — максимальное количество единовременных соединений с сервером баз данных с хоста запрос блокируется если он прерывается запросами с того же хоста до момента окончания обработки запроса) блокируются навсегда, очистить можно только из командной оболочки MySQL:

В случае атаки на сервер нужно уменьшать (5) чтобы отсекать попытки соединения, при большой активности веб-сервера можно увеличивать max_allowed_packet (default 1M) — максимальный для буфера соединений и буфера результата при исполнении SQL инструкций. Каждый тред имеет свой буфер. Хорошим значением для начала будет 16М. tmp_table_size (system-specific default) — максимальный размер памяти выделяемой под хранение временных таблиц. 16М — довольно много.

Примеры готовых конфигураций для разных объёмов памяти можно посмотреть здесь.

Чтобы посомореть значения переменных можно воспользоваться SQL запросом:

или для конкретных переменных:

Чтобы проверить мониториг InnoDB, используте:

Чтобы узнать, не свопается ли память, используйте команду и смотрите строку swap:

Оптимизация MySQL для MyISAM

Оптимизация параметров MySQL позволяет значительно увеличить производительность MyISAM.

Буферы

Основными параметрами являются key_buffer_size (буфер для работы с ключами и индексами) и sort_buffer (буфер для сортировки).

key_buffer_size = 64M
sort_buffer_size = 32M

1
2

key_buffer_size=64M

sort_buffer_size=32M

При наличии 16Гб памяти и более, рекомендуется увеличить key_buffer_size до 128M-256M. Если Вы не используете MyISAM таблицы, рекомендуется установить размер key_buffer_size в 32Мб для хранения индексов временных таблиц.

Кэши

Кэш запросов указывается в опции query_cache_size, ограничение на кэшируемый элемент в query_cache_limit, кэш открытых таблиц в table_open_cache.

table_open_cache = 2048
query_cache_limit = 2M
query_cache_size = 128M
query_cache_type = 1
thread_cache_size = 16

max_heap_table_size = 128M
tmp_table_size = 128M

1
2
3
4
5
6
7
8

table_open_cache=2048

query_cache_limit=2M

query_cache_size=128M

query_cache_type=1

thread_cache_size=16

max_heap_table_size=128M

tmp_table_size=128M

Будьте внимательны при установке завышенного значения query_cache_size, т.к. это может привести к ожиданию блокировок (Be careful not to set the size of the cache too large. Due to the need for threads to lock the cache during updates, you may see lock contention issues with a very large cache). Мы не рекомендуем устанавливать значение больше 256M.

Параметр thread_cache_size указывает количество тредов (threads), уходящих в кеш при отключении клиента. При новом подключении тред не создается, а берется из кеша, что позволяет экономить ресурсы при больших нагрузках. При наличии 32Гб памяти и более рекомендуем увеличить thread_cache_size до 32, table_open_cache в диапазон 4096-8192, query_cache_size до 256M.

Вторичная оптимизация конфига MySQL

Под вторичной оптимизацией я подразумеваю тот тюнинг, который можно произвести только зная профиль нагрузки на БД: соотношение операций чтения и записи, долгие запросы и т.п.

Тюнинг performance_schema в MySQL

Опция performance_schema производит мониторинг всей БД, на что расходуется некоторая часть ресурсов, держать эту опцию постоянно включенной в продакшене крайне не рекомендуется, т.к. может замедлять время выполнения запросов до 25%. Объем потребляемых ресурсов зависит от конфигурации схемы, которую можно посмотреть выполнив запрос:

SHOW VARIABLES LIKE 'performance%';

А если выполнить от имени администратора БД этот запрос:

SHOW ENGINE performance_schema STATUS;

С помощью этого запроса можно понять все ли данные мониторятся, или что-то пропадает:

SHOW STATUS LIKE 'performance%';

Если какой-то счетчик оказался выше ноля, то нужно увеличить соответствующий параметр.

Именно на данных из performance_schema и основана вся фишка MySQLTuner! Чем дольше собираются данные, тем точнее будут рекомендации по оптимизации MySQL и MariaDB. Стоит учесть, что данные performance_schema обнуляются после каждой перезагрузки сервера, поэтому сначала лучше выполнить первичную конфигурацию, после чего оставить сервер под боевой нагрузкой на сутки для последующего анализа.

Работа с данными performance_schema

Переходим в базу данных performance_schema :

USE performance_schema;

И смотрим какие таблицы здесь есть:

SHOW TABLES;

Обратим внимание на наблицы с префиксом setup_, например:

SELECT * FROM setup_consumers;
SELECT * FROM setup_instruments;

В них содержатся настройки того, что будет мониториться. С помощью UPDATE можно менять значение колонки ENABLED с NO на YES и наоборот.

Самые горячие таблицы

С помощью этого запроса можно узнать к каким таблицам происходит наибольшее число чтений и записей:

select substring_index(file_name, '/', -1) file_name, event_name, count_read, count_write from file_summary_by_instance where COUNT_READ+COUNT_WRITE > 0 order by COUNT_READ+COUNT_WRITE desc limit 30;

А этим запросом можно узнать статистику по блокировкам:

select event_name, source, sum(timer_wait) timer_wait from events_waits_history_long where event_name not like 'wait/io/file%' group by event_name, source order by 3 desc limit 30;

Решение

Давайте увеличим лимит файловых дескрипторов для mysqld на 10000.
Для начала нужно выяснить систему инициализации в нашем Linux дистрибутиве, выполняем:

strings /sbin/init | awk 'match($0, /(upstart|systemd|sysvinit)/) { print toupper(substr($0, RSTART, RLENGTH));exit; }'

Команда выдала SYSTEMD.
Для systemd лимиты устанавливаются немного по другому, чем принято думать, а именно:

Выясним где находится unit файл для запуска MySQL:

# systemctl status mysql
● mysql.service - MySQL Community Server
   Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
   Active: active (running) since Пт 2018-04-27 06:01:36 +05; 6h ago
 Main PID: 6370 (mysqld)
    Tasks: 82
   Memory: 88.2G
      CPU: 1d 19h 2min 53.203s
   CGroup: /system.slice/mysql.service
           └─6370 /usr/sbin/mysqld

Создадим файл с описанием новых лимитов:

Мы выяснили, что unit файл это /lib/systemd/system/mysql.service, теперь нам нужно создать каталог /lib/systemd/system/mysql.service.d и в нем разместить файл limit.conf со следующим содержимым:

LimitNOFILE=10000

Выполним несколько команд для этого:

mysql_systemd_dir="/lib/systemd/system/mysql.service.d"
mkdir -p ${mysql_systemd_dir}
echo "" >${mysql_systemd_dir}/limit.conf
echo "LimitNOFILE=10000" >>${mysql_systemd_dir}/limit.conf
systemctl daemon-reload

Теперь проверим будет ли наша конфигурация подхвачена:

# systemctl status mysql

● mysql.service - MySQL Community Server
   Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
  Drop-In: /lib/systemd/system/mysql.service.d
           └─limit.conf
   Active: active (running) since Пт 2018-04-27 06:01:36 +05; 6h ago
 Main PID: 6370 (mysqld)
    Tasks: 82
   Memory: 88.2G
      CPU: 1d 19h 2min 53.203s
   CGroup: /system.slice/mysql.service
           └─6370 /usr/sbin/mysqld

Отлично, теперь нам нужно перезапустить MySQL:

systemctl restart mysql

Проверим настройки MySQL:

# mysql -u root -p
 
mysql> show global variables like '%max_connections%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 300   |
+-----------------+-------+
1 row in set (0,00 sec)
 
mysql> show global variables like '%open_files_limit%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| open_files_limit | 10000 |
+------------------+-------+
1 row in set (0,00 sec)
 
mysql> show global variables like '%table_open_cache';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| table_open_cache | 16000 |
+------------------+-------+
1 row in set (0,00 sec)

Увеличение числа открытых файлов

В большинстве Linix-систем по умолчанию лимит открытия файловых дескрипторов установлен в 1024, для работы этого недостаточно.

Проверим текущие опции:

ulimit -n

1 ulimit-n

Внесем требуемые лимиты в

* hard nofile 35000
* soft nofile 35000
root hard nofile 35000
root soft nofile 35000

1
2
3
4

*hard    nofile35000

*soft    nofile35000

root      hard    nofile35000

root      soft    nofile35000

Динамически изменим текущие лимиты:

ulimit -n 35000

1 ulimit-n35000

Проверим soft limit:

ulimit -Sn

1 ulimit-Sn

и hard limit

ulimit -Hn

1 ulimit-Hn

Текущие лимиты в MySQL проверим SQL-запросом:

SHOW VARIABLES LIKE ‘%open_files%’

1 SHOW VARIABLES LIKE’%open_files%’

innodb_open_files 2048
open_files_limit 35000

1
2

innodb_open_files2048

open_files_limit35000

Увеличить Max Open File Limit в Unix/Linux

Приведу команды на различные Unix/Linux ОС

Увеличить Max Open File Limit в Linux

Для начала проверим какой предел установлен в ОС:

# cat /proc/sys/fs/file-max

Увеличиваем данный предел  в Linux

Мы можем увеличить лимиты для открытых файлов:

  • Временно.
  • Постоянно.

-===ВРЕМЕННО===-

Если есть необходимость увеличить лимит временно (для тестирования, например), то можно это сделать так:

# sysctl -w fs.file-max=500000

Или:

# echo "500000" > /proc/sys/fs/file-max

Вот еще один пример:

# ulimit -n 65635

-===ПОСТОЯННО===-

Если есть необходимость увеличить лимит навсегда, то  можно это сделать так:

# vim /etc/sysctl.conf

fs.file-max = 500000

Эти настройки будут сохраняться даже после перезагрузки системы. После добавления конфигурации в файл, выполните следующую команду, чтобы изменения вступили в силу:

# sysctl -p

Настройка лимитов для каждого пользователя

# vim /etc/security/limits.conf

Добавляем параметры:

* hard nofile 500000
* soft nofile 500000
root hard nofile 500000
root soft nofile 500000

Проверка установленных лимитов

Используйте следующую команду, чтобы увидеть максимальное чисто для открытых файлов:

# cat /proc/sys/fs/file-max

Подключаемся от пользователя (у меня это nginx):

# su nginx

Проверяем параметры Hard лимитов:

# ulimit -Hn

В консоле, можно ввести данную команду (очень удобно отображает):

# for pid in `pidof nginx`; do echo "$(< /proc/$pid/cmdline)"; egrep 'files|Limit' /proc/$pid/limits; echo "Currently open files: $(ls -1 /proc/$pid/fd | wc -l)"; echo; done

Проверяем параметры лимитов Soft:

# ulimit -Sn

Увеличить Max Open File Limit в Mac OS X

Выполним проверку лимитов с помощью:

$ launchctl limit maxfiles

Где:

  • Первый аргумент — soft limit.
  • Второй аргумент — hard limit.

Можно прописать в файл:

# vim ~/.bash_profile

Следующее значение:

ulimit -n 65536 200000

Вот и все!

Увеличюем nginx worker_rlimit_nofile  в nginx ( на уровне Nginx)

В nginx также можно увеличить лимиты с директивой worker_rlimit_nofile, которая позволяет увеличить этот лимит, если это не хватает данного ресурса на лету на уровне процесса:

# vim /etc/nginx/nginx.conf

И прописываем (редактируем):

# set open fd limit to 30000
worker_rlimit_nofile 30000;

После чего, проверяем конфигурацию nginx и перезапускаем его:
Save and close the file. Reload nginx web server, enter:

# nginx -t && service nginx -s reload

ulimit в Kali Linux

Включение ограничений на основе PAM в Unix/Lixux

Для Debian/Ubuntu

Редактируем файл (Debian/Ubuntu):

# vim /etc/pam.d/common-session

Вставляем:

session    required   pam_limits.so

Открываем еще один файл:

# vim /etc/security/limits.conf

Прописываем лимиты:

* soft nofile 65536
* hard nofile 200000

Открываем:

# vim /etc/ssh/sshd_config

И, приводим к виду:

UseLogin yes

И выполняем рестарт:

# reboot

Для CentOS/RedHat/Fedora

Редактируем файл (Debian/Ubuntu):

# vim /etc/pam.d/login

Вставляем:

session    required   pam_limits.so

Открываем еще один файл:

# vim /etc/security/limits.conf

Прописываем лимиты:

* soft nofile 65536
* hard nofile 200000

Открываем:

# vim /etc/ssh/sshd_config

И, приводим к виду:

UseLogin yes

И выполняем рестарт:

# reboot

У меня все! Статья «Увеличить Max Open File Limit в Unix/Linux», завершено.

Разбор параметров тюнинга Mysql

Разберёмся по порядку с каждым параметром настройки и вопросами которые есть при этом. Итак по пунктам.

key_buffer = 2Gkey_buffer_size = 4G
Так и не смог я понять, различаются ли эти два параметра или первый является устаревшим значением второго.

max_connections = 500 и thread-cache-size = 500 
По замерам выходило, что не более 90 одновременных подключений, так и поставил 500 с запасом. Тут следует учесть что следующий параметр thread-cache-size должен быть одинаковым числом с максимальным соединением. Поэтому там также стоит 500.

table-cache = 120000 и table-open-cache = 120000 
Здесь я поставил по 120000, так как таблиц у меня достаточно много, если у вас не много сайтов, то этот параметр можно не повышать.

interactive-timeout = 360
Установил в 360, чтобы снимались запросы, которые находятся без активности 6 минут или 360 секунд.

query_cache_limit = 12Mquery_cache_size    = 4Gjoin_buffer_size = 512M
Следующие три параметра настроил исходя из следующих наблюдений. Пробовал ставить query_cache_size от 2 до 6 гигабайт, в итоге оптимально показалось 4. Обработка запросов до 12 мегабайт мне вполне хватало, поэтому оставил 12. Но есть такое мнение, что большой query_cache_size на самом деле сильно грузит систему и желательно держать кеш в memcashed, на практике я не заметил особо, чтобы он забирал мощность, а вот при проверке кеша, обнаружил, что много запросов проходит через него.

sort_buffer_size    = 1Gread_buffer_size    = 1Gread_rnd_buffer_size = 2G
Буфера поставил побольше, так как несколько баз имеют большой размер, хотя есть риск переполнения памяти, тем не менее они настолько не забивали память.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Техноарена
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: