web-dev-qa-db-ja.com

システムのメモリが不足しているため、mysqldは終了します。何をすべきか?

最近、サイトの移行を行いました。その間、私はすべてのプラグインを消去し、サイトがサーバーをクラッシュさせたので最小限のものだけを再インストールする必要がありました(1 GBのRAMを持つVPS)。だから今はサイトがオンになっていますが、時々"メモリ不足:システムのメモリが不足しているため、プロセス" mysqld "が終了しました。"、実際には毎日、ただし決められた時間に(私はcronジョブを実行していません)。私はMysqltunerを実行してみて、それらの提案に同意します:tmp_table_sizeおよびmax_heap_table_size 16Mから32M; innodb_buffer_pool_size 250Mから800(全RAMの80%) innodb_buffer_pool_instances = 1およびkey_buffer_size 12.8Mから25Mまで。

今、私は再びmysqltunerを実行しました(mysqldが今朝再び殺されたことを再確認した後)-もちろん、(mysql sererが24時間未満実行されていたため)この結果の統計的な目的はあまり正確ではないことはわかっていますが、 mysqlがクラッシュのために毎日再起動し続けるため、適切な結果が得られない可能性があります-:

    >>  MySQLTuner 1.6.13 - Major Hayden <[email protected]>
 >>  Bug reports, feature requests, and downloads at http://mysqltuner.com/
 >>  Run with '--help' for additional options and output filtering

[--] Skipped version check for MySQLTuner script
[OK] Currently running supported MySQL version 5.6.30
[OK] Operating on 32-bit architecture with less than 2GB RAM

-------- Storage Engine Statistics -----------------------------------------------------------------
[--] Status: +ARCHIVE +BLACKHOLE +CSV -FEDERATED +InnoDB +MEMORY +MRG_MYISAM +MyISAM +PERFORMANCE_SCHEMA 
[--] Data in MyISAM tables: 30M (Tables: 33)
[--] Data in InnoDB tables: 249M (Tables: 127)
[OK] Total fragmented tables: 0

-------- Security Recommendations ------------------------------------------------------------------
[OK] There are no anonymous accounts for any database users
[!!] User 'leechprotect@localhost' has no password set.
[!!] There is no basic password file list!

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

-------- Performance Metrics -----------------------------------------------------------------------
[--] Up for: 13h 13m 58s (2M q [54.533 qps], 40K conn, TX: 74G, RX: 280M)
[--] Reads / Writes: 99% / 1%
[--] Binary logging is disabled
[--] Physical Memory     : 1006.3M
[--] Max MySQL memory    : 1.0G
[--] Other process memory: 104.1M
[--] Total buffers: 874.0M global + 1.1M per thread (151 max threads)
[--] P_S Max memory usage: 0B
[--] Galera GCache Max memory usage: 0B
[!!] Maximum reached memory usage: 901.6M (89.60% of installed RAM)
[!!] Maximum possible memory usage: 1.0G (102.80% of installed RAM)
[!!] Overall possible memory usage with other process exceeded memory
[OK] Slow queries: 0% (0/2M)
[OK] Highest usage of available connections: 17% (26/151)
[OK] Aborted connections: 0.04%  (17/40146)
[!!] name resolution is active : a reverse name resolution is made for each new connection and can reduce performance
[OK] Query cache is disabled by default due to mutex contention on multiprocessor machines.
[OK] Sorts requiring temporary tables: 0% (34 temp sorts / 219K sorts)
[OK] No joins without indexes
[!!] Temporary tables created on disk: 82% (76K on disk / 92K total)
[OK] Table cache hit rate: 97% (273 open / 281 opened)
[OK] Open file limit used: 1% (113/10K)
[OK] Table locks acquired immediately: 100% (2M immediate / 2M locks)

-------- Performance schema ------------------------------------------------------------------------
[--] Performance schema is disabled.

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

-------- MyISAM Metrics ----------------------------------------------------------------------------
[!!] Key buffer used: 12.4% (3M used / 26M cache)
[OK] Key buffer size / total MyISAM indexes: 25.0M/12.8M
[OK] Read Key buffer hit rate: 98.0% (10K cached / 211 reads)
[!!] Write Key buffer hit rate: 44.7% (2K cached / 1K writes)

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

-------- InnoDB Metrics ----------------------------------------------------------------------------
[--] InnoDB is enabled.
[OK] InnoDB buffer pool / data size: 800.0M/249.5M
[OK] InnoDB buffer pool instances: 1
[!!] InnoDB Used buffer: 9.87% (5055 used/ 51200 total)
[OK] InnoDB Read buffer efficiency: 100.00% (182843753 hits/ 182848469 total)
[!!] InnoDB Write Log efficiency: 50.11% (4188 hits/ 8357 total)
[OK] InnoDB log waits: 0.00% (0 waits / 12545 writes)

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

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

-------- Replication Metrics -----------------------------------------------------------------------
[--] Galera Synchronous replication: NO
[--] No replication slave(s) for this server.
[--] This is a standalone server.

-------- Recommendations ---------------------------------------------------------------------------
General recommendations:
    Set up a Password for user with the following SQL statement ( SET PASSWORD FOR 'user'@'SpecificDNSorIp' = PASSWORD('secure_password'); )
    MySQL started within last 24 hours - recommendations may be inaccurate
    Reduce your overall MySQL memory footprint for system stability
    Dedicate this server to your database for highest performance.
    Configure your accounts with ip or subnets only, then update your configuration with skip-name-resolve=1
    When making adjustments, make tmp_table_size/max_heap_table_size equal
    Reduce your SELECT DISTINCT queries which have no LIMIT clause
Variables to adjust:
  *** MySQL's maximum memory usage is dangerously high ***
  *** Add RAM before increasing MySQL buffer variables ***
    tmp_table_size (> 32M)
    max_heap_table_size (> 32M)

MySQLのメモリ使用量を減らす必要があるのは明らかです。 VPSは1つのサイトしか実行しておらず、プラグインがほとんどなく、訪問数も少ないため、問題はRAMそれ自体ではなく、悲惨なことです)サイトの移行の試み。

1
Leo

1GBのRAMでは、あなたはmayinnodb_buffer_pool_sizeから50Mまで、おそらく1億まで。しかし、間違いなく800Mではありません。 80%のアドバイスは少なくとも4GBのRAMを搭載していることを前提としており、80%はそれでも高すぎます。

同じマシン(Apache?)に他のものがあると、窮屈な場所に追加されます。 Apacheを使用している場合は、MaxClientsを10に下げます。

その上でトラブルを避けるための他のことtinyマシン:

max_connections = 25
table_open_cache = 300
key_buffer_size = 4M
tmp_table_size = 4M
max_heap_table_size = 4M

そしてクエリを見てください-必要以上に多くのリソースを使用しています( "ディスク上に作成された一時テーブル:82%")

1
Rick James

ご回答有難うございます。 OK、オラクルのサイトで提案されているvmstatのことをしました。了解しました。これらの統計情報に異常があるかどうかは本当にわかりません。

    procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0     39    280     43    378    0    0    84   189  137   12 29  4 61  6  0    
 0  0     39    279     43    379    0    0    26    59  414  397 27  3 63  7  0    
 1  0     39    258     43    379    0    0     5    38  314  316 21  3 73  3  0    
 0  0     39    348     43    379    0    0     1    34  202  204 12  2 82  4  0    
 0  0     39    348     43    379    0    0     0    39  227  219 14  2 78  6  0    
 0  0     39    348     44    379    0    0     3    30  184  191 11  1 83  5  0    
 0  0     39    346     44    379    0    0     2    44  383  374 27  3 65  5  0    
 1  1     39    325     44    379    0    0     0    32  222  224 14  2 81  3  0    
 0  0     39    346     44    379    0    0     8    51  381  338 26  3 64  6  0    
 0  0     39    346     44    379    0    0     1    41  328  328 22  3 73  3  0    

また、それを回避するために、innodb_buffer_sizeを800M(私が設定したと言いました)から500Mに変更しましたMySQLの最大メモリ使用量が危険なほど高い

0
Leo