Mysqld постепенно жрет память и swap

vartovy
На сайте с 11.04.2009
Offline
72
3525

Облачный VPS

Два WWW-домена

Информация о системе: http://prntscr.com/lyvg8k

RAM: 2 Гб.

Процесс mysqld использует около 20% ram

А также, понемногу ест свап.

Значения переменных сервера Mysqld установлены так, как указано здесь: https://ruhighload.com/mycnfexample?ram=2

Но, с этими настройками использование памяти наоборот выросло до 20%.

Значения по умолчанию дают 18%.

Пробовал менять значения - удавалось сбить до 10%. Но, наверное и это много.

Mysqltuner.pl

[OK] Logged in using credentials from Debian maintenance account.

[OK] Currently running supported MySQL version 5.7.24-0ubuntu0.16.04.1-log
[OK] Operating on 64-bit architecture

-------- Log file Recommendations ------------------------------------------------------------------
[--] Log file: /var/log/mysql/error.log(368K)
[OK] Log file /var/log/mysql/error.log exists
[OK] Log file /var/log/mysql/error.log is readable.
[OK] Log file /var/log/mysql/error.log is not empty
[OK] Log file /var/log/mysql/error.log is smaller than 32 Mb
[!!] /var/log/mysql/error.log contains 150 warning(s).
[!!] /var/log/mysql/error.log contains 372 error(s).
[--] 39 start(s) detected in /var/log/mysql/error.log
[--] 1) 2018-12-24T06:42:22.938075Z 0 [Note] /usr/sbin/mysqld: ready for connections.
[--] 2) 2018-12-24T06:41:58.773292Z 0 [Note] /usr/sbin/mysqld: ready for connections.
[--] 3) 2018-12-24T06:41:22.191987Z 0 [Note] /usr/sbin/mysqld: ready for connections.
[--] 4) 2018-12-24T06:40:51.764695Z 0 [Note] /usr/sbin/mysqld: ready for connections.
[--] 5) 2018-12-24T06:38:54.011560Z 0 [Note] /usr/sbin/mysqld: ready for connections.
[--] 6) 2018-12-24T06:38:13.434029Z 0 [Note] /usr/sbin/mysqld: ready for connections.
[--] 7) 2018-12-24T06:37:46.458100Z 0 [Note] /usr/sbin/mysqld: ready for connections.
[--] 8) 2018-12-24T06:32:54.434803Z 0 [Note] /usr/sbin/mysqld: ready for connections.
[--] 9) 2018-12-24T06:23:26.215369Z 0 [Note] /usr/sbin/mysqld: ready for connections.
[--] 10) 2018-12-24T06:22:30.208131Z 0 [Note] /usr/sbin/mysqld: ready for connections.
[--] 42 shutdown(s) detected in /var/log/mysql/error.log
[--] 1) 2018-12-24T06:42:22.242318Z 0 [Note] /usr/sbin/mysqld: Shutdown complete
[--] 2) 2018-12-24T06:41:58.007881Z 0 [Note] /usr/sbin/mysqld: Shutdown complete
[--] 3) 2018-12-24T06:41:21.550688Z 0 [Note] /usr/sbin/mysqld: Shutdown complete
[--] 4) 2018-12-24T06:40:51.125271Z 0 [Note] /usr/sbin/mysqld: Shutdown complete
[--] 5) 2018-12-24T06:38:53.404099Z 0 [Note] /usr/sbin/mysqld: Shutdown complete
[--] 6) 2018-12-24T06:38:12.934643Z 0 [Note] /usr/sbin/mysqld: Shutdown complete
[--] 7) 2018-12-24T06:37:45.799435Z 0 [Note] /usr/sbin/mysqld: Shutdown complete
[--] 8) 2018-12-24T06:32:53.613176Z 0 [Note] /usr/sbin/mysqld: Shutdown complete
[--] 9) 2018-12-24T06:23:25.708045Z 0 [Note] /usr/sbin/mysqld: Shutdown complete
[--] 10) 2018-12-24T06:22:29.606549Z 0 [Note] /usr/sbin/mysqld: Shutdown complete

-------- Storage Engine Statistics -----------------------------------------------------------------
[--] Status: +ARCHIVE +BLACKHOLE +CSV -FEDERATED +InnoDB +MEMORY +MRG_MYISAM +MyISAM +PERFORMANCE_SCHEMA
[--] Data in InnoDB tables: 146.7M (Tables: 113)
[--] Data in MyISAM tables: 50.0K (Tables: 2)
[OK] Total fragmented tables: 0

-------- Analysis Performance Metrics --------------------------------------------------------------
[--] innodb_stats_on_metadata: OFF
[OK] No stat updates during querying INFORMATION_SCHEMA.

-------- Security Recommendations ------------------------------------------------------------------
[OK] There are no anonymous accounts for any database users
[OK] All database users have passwords assigned
[--] There are 605 basic passwords in the list.

-------- CVE Security Recommendations --------------------------------------------------------------
[--] Skipped due to --cvefile option undefined

-------- Performance Metrics -----------------------------------------------------------------------
[--] Up for: 16m 54s (21K q [21.637 qps], 714 conn, TX: 126M, RX: 3M)
[--] Reads / Writes: 99% / 1%
[--] Binary logging is disabled
[--] Physical Memory : 2.0G
[--] Max MySQL memory : 1.7G
[--] Other process memory: 0B
[--] Total buffers: 1.5G global + 1.5M per thread (136 max threads)
[--] P_S Max memory usage: 72B
[--] Galera GCache Max memory usage: 0B
[OK] Maximum reached memory usage: 1.5G (77.53% of installed RAM)
[!!] Maximum possible memory usage: 1.7G (87.30% of installed RAM)
[OK] Overall possible memory usage with other process is compatible with memory available
[OK] Slow queries: 0% (0/21K)
[OK] Highest usage of available connections: 2% (4/136)
[OK] Aborted connections: 0.14% (1/714)
[!!] name resolution is active : a reverse name resolution is made for each new connection and can reduce performance
[!!] Query cache may be disabled by default due to mutex contention.
[!!] Query cache efficiency: 0.0% (0 cached / 20K selects)
[OK] Query cache prunes per day: 0
[OK] Sorts requiring temporary tables: 0% (0 temp sorts / 4K sorts)
[OK] No joins without indexes
[!!] Temporary tables created on disk: 72% (3K on disk / 4K total)
[OK] Thread cache hit rate: 99% (4 created / 714 connections)
[OK] Table cache hit rate: 67% (1K open / 1K opened)
[OK] Open file limit used: 0% (50/16K)
[OK] Table locks acquired immediately: 100% (156 immediate / 156 locks)

-------- Performance schema ------------------------------------------------------------------------
[--] Memory used by P_S: 72B
[--] Sys schema is installed.

-------- ThreadPool Metrics ------------------------------------------------------------------------
[--] ThreadPool stat is disabled.

-------- MyISAM Metrics ----------------------------------------------------------------------------
[!!] Key buffer used: 18.3% (2M used / 16M cache)
[OK] Key buffer size / total MyISAM indexes: 15.6M/57.0K
[!!] Read Key buffer hit rate: 91.9% (124 cached / 10 reads)

-------- InnoDB Metrics ----------------------------------------------------------------------------
[--] InnoDB is enabled.
[--] InnoDB Thread Concurrency: 0
[OK] InnoDB File per table is activated
[OK] InnoDB buffer pool / data size: 1.0G/146.7M
[!!] Ratio InnoDB log file size / InnoDB Buffer pool size (47.65625 %): 244.0M * 2/1.0G should be equal 25%
[OK] InnoDB buffer pool instances: 1
[--] Number of InnoDB Buffer Pool Chunk : 8 for 1 Buffer Pool Instance(s)
[OK] Innodb_buffer_pool_size aligned with Innodb_buffer_pool_chunk_size & Innodb_buffer_pool_instances
[OK] InnoDB Read buffer efficiency: 99.78% (1499325 hits/ 1502623 total)
[OK] InnoDB Write log efficiency: 92.19% (991 hits/ 1075 total)
[OK] InnoDB log waits: 0.00% (0 waits / 84 writes)

-------- AriaDB Metrics ----------------------------------------------------------------------------
[--] AriaDB is disabled.

-------- TokuDB Metrics ----------------------------------------------------------------------------
[--] TokuDB is disabled.

-------- XtraDB Metrics ----------------------------------------------------------------------------
[--] XtraDB is disabled.

-------- Galera Metrics ----------------------------------------------------------------------------
[--] Galera is disabled.

-------- Replication Metrics -----------------------------------------------------------------------
[--] Galera Synchronous replication: NO
[--] No replication slave(s) for this server.
[--] Binlog format: ROW
[--] XA support enabled: ON
[--] Semi synchronous replication Master: Not Activated
[--] Semi synchronous replication Slave: Not Activated
[--] This is a standalone server

-------- Recommendations ---------------------------------------------------------------------------
General recommendations:
Control warning line(s) into /var/log/mysql/error.log file
Control error line(s) into /var/log/mysql/error.log file
MySQL was started within the last 24 hours - recommendations may be inaccurate
Reduce your overall MySQL memory footprint for system stability
Configure your accounts with ip or subnets only, then update your configuration with skip-name-resolve=1
Temporary table size is already large - reduce result set size
Reduce your SELECT DISTINCT queries without LIMIT clauses
Before changing innodb_log_file_size and/or innodb_log_files_in_group read this: https://*******/2TcGgtU
Variables to adjust:
query_cache_size (=0)
query_cache_type (=0)
query_cache_limit (> 1M, or use smaller result sets)
innodb_log_file_size should be (=128M) if possible, so InnoDB total log files size equals to 25% of buffer pool size.
M
На сайте с 17.09.2016
Offline
124
#1

innodb_buffer_pool_size = 1024M для Вашей базы слишком большой

Можно уменьшить до 256 Mb

p.s. все эти советы в статьях - это может сказаться как в лучшую так и в худшую сторону

Нет универсального решения, всё нужно тюнить под конкретные нагрузки/объёмы базы

PA
На сайте с 15.02.2018
Offline
97
#2

Уменьшить буффер innodb, как вам выше написали. Уменьшить количество соединений и вообще 20% это норм.

skip-name-resolve=1

vm.swappiness = 10 или меньше в sysctl, чтобы в swap не лезло.

Продаю ХОСТИНГ | Дедик, VDS, Бекап ( https://is.gd/vgd245) дешево | Мои VDS ( https://is.gd/vds100 ) быстрее твоих
vartovy
На сайте с 11.04.2009
Offline
72
#3
Mobiaaa:
innodb_buffer_pool_size = 1024M для Вашей базы слишком большой
Можно уменьшить до 256 Mb
p.s. все эти советы в статьях - это может сказаться как в лучшую так и в худшую сторону
Нет универсального решения, всё нужно тюнить под конкретные нагрузки/объёмы базы

Спасибо за совет!

Уменьшил это значение с 1 Гб. до 134 Мб.

Использование памяти mysql снизилось с 1530 до 1300 мб.

top показывает использование памяти 12,8% (было)

Вспомнил один случай из своей жизни.

Это было больше 10 лет назад.

Я купил компьютер и не умел даже драйвер с диска для диалап модема поставить.

Но, на самом компе поставил разные проги, которые показывают температуру проца, винта, всякие показатели питания и т.д. И вдруг, одна прога показала, что возможно проц перегревается, что нет нормальной вентиляции и т.д.

Я сразу за системник и на сервис. Пришел такой полный ламер и мастера на меня смотрят и говорят: ну, рассказывай, что там случилось?

Я: проц перегревается!

А они: а ты откуда знаешь?

Я уверено: прога показала.

...

Честные ребята попались, успокоили меня и выпроводили по быстрому, чтобы мозги не трах**.

А современные мастера уже бы пол компа пересобрали, чтобы проц не грелся ))) (бабки рулят).

M
На сайте с 17.09.2016
Offline
124
#4
Pavel A:
vm.swappiness = 10 или меньше в sysctl, чтобы в swap не лезло.

В mysql есть для этого опция memlock

https://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_memlock

---------- Добавлено 24.12.2018 в 13:06 ----------

vartovy:
Использование памяти mysql снизилось с 1530 до 1300 мб.
top показывает использование памяти 12,8% (было)

Вы по какой колонке в top определяете потребление RAM ?

Случайно не VIRT ?

vartovy
На сайте с 11.04.2009
Offline
72
#5
Mobiaaa:
В mysql есть для этого опция memlock
https://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_memlock

---------- Добавлено 24.12.2018 в 13:06 ----------


Вы по какой колонке в top определяете потребление RAM ?
Случайно не VIRT ?

Нагрузку в top смотрю для процесса в колонке %mem и res

А также, смотрю в панели ISPManager - Информация о системе - Процессы

Поставил еще:

skip-name-resolve=1

Максимальные соединения - 50

memlock - true

Использование памяти больше не растет.

Но, swap немножко растет.

---------- Добавлено 24.12.2018 в 16:44 ----------

Выяснил, что это не Mysqld использует swap. Это др. процессы: systemd, apache2, core....

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий