Mysql 崩溃、oom-killer、内存不足、调整问题?

Mysql 崩溃、oom-killer、内存不足、调整问题?

我刚刚将所有网站都移到了一台具有 4GB RAM 的新服务器上。几乎立刻,mysql 就开始崩溃,而且一度无法重新启动,导致严重中断(因为直到有人向我指出,我才注意到)。

以下是删除了 CRON 作业的日志:http://pastebin.com/9SAUBcFp(apache2 调用 oom-killer、内存不足错误等)

没有任何东西的df -h使用率超过 4%。

以下是 free -m 的输出

             total       used       free     shared    buffers     cached
Mem:          4002       2090       1911          0        168       1015
-/+ buffers/cache:        906       3095
Swap:          255          8        247

这是 mysqlreport 的输出

__ Key _________________________________________________________________
Buffer used   849.00k of  16.00M  %Used:   5.18
  Current       2.99M            %Usage:  18.71
Write hit      44.87%
Read hit       98.84%

__ Questions ___________________________________________________________
Total         198.55k    33.8/s
  QC Hits     147.94k    25.1/s  %Total:  74.51
  DMS          31.35k     5.3/s           15.79
  Com_         14.20k     2.4/s            7.15
  COM_QUIT      5.07k     0.9/s            2.55
  -Unknown          9     0.0/s            0.00
Slow 2 s            0       0/s            0.00  %DMS:   0.00  Log:  ON
DMS            31.35k     5.3/s           15.79
  SELECT       27.65k     4.7/s           13.93         88.19
  UPDATE        1.78k     0.3/s            0.89          5.66
  INSERT        1.73k     0.3/s            0.87          5.51
  DELETE          199     0.0/s            0.10          0.63
  REPLACE           0       0/s            0.00          0.00
Com_           14.20k     2.4/s            7.15
  set_option    9.29k     1.6/s            4.68
  change_db     4.63k     0.8/s            2.33
  show_tables     260     0.0/s            0.13

__ SELECT and Sort _____________________________________________________
Scan              850     0.1/s %SELECT:   3.07
Range             398     0.1/s            1.44
Full join           0       0/s            0.00
Range check         0       0/s            0.00
Full rng join       0       0/s            0.00
Sort scan       1.01k     0.2/s
Sort range        361     0.1/s
Sort mrg pass       0       0/s

__ Query Cache _________________________________________________________
Memory usage   15.09M of  16.00M  %Used:  94.30
Block Fragmnt   2.31%
Hits          147.94k    25.1/s
Inserts        21.70k     3.7/s
Insrt:Prune    2.86:1     2.4/s
Hit:Insert     6.82:1

__ Table Locks _________________________________________________________
Waited              0       0/s  %Total:   0.00
Immediate      35.51k     6.0/s

__ Tables ______________________________________________________________
Open              400 of  400    %Cache: 100.00
Opened          5.55k     0.9/s

__ Connections _________________________________________________________
Max used            9 of  151      %Max:   5.96
Total           5.07k     0.9/s

__ Created Temp ________________________________________________________
Disk table        554     0.1/s
Table           1.61k     0.3/s    Size:  16.0M
File                6     0.0/s

__ Threads _____________________________________________________________
Running             1 of    1
Cached              7 of    8      %Hit:  99.82
Created             9     0.0/s
Slow                0       0/s

__ Aborted _____________________________________________________________
Clients             0       0/s
Connects            5     0.0/s

__ Bytes _______________________________________________________________
Sent            3.57G  607.2k/s
Received       34.01M    5.8k/s

__ InnoDB Buffer Pool __________________________________________________
Usage          98.28M of 127.98M  %Used:  76.79
Read hit       99.98%
Pages
  Free          1.90k            %Total:  23.21
  Data          5.61k                     68.50 %Drty:   0.00
  Misc            679                      8.29
  Latched           0                      0.00
Reads          21.60M    3.7k/s
  From file     4.62k     0.8/s            0.02
  Ahead Rnd         0       0/s
  Ahead Sql                 0/s
Writes         10.83k     1.8/s
Flushes         5.27k     0.9/s
Wait Free           0       0/s

__ InnoDB Lock _________________________________________________________
Waits               0       0/s
Current             0
Time acquiring
  Total             0 ms
  Average           0 ms
  Max               0 ms

__ InnoDB Data, Pages, Rows ____________________________________________
Data
  Reads         5.57k     0.9/s
  Writes        7.95k     1.4/s
  fsync         3.10k     0.5/s
  Pending
    Reads           0
    Writes          0
    fsync           0

Pages
  Created          48     0.0/s
  Read          5.56k     0.9/s
  Written       5.27k     0.9/s

Rows
  Deleted         190     0.0/s
  Inserted        242     0.0/s
  Read          7.47M    1.3k/s
  Updated       1.36k     0.2/s

这是 mysqltuner 的输出

-------- General Statistics --------------------------------------------------
[--] Skipped version check for MySQLTuner script
[OK] Currently running supported MySQL version 5.5.35-0+wheezy1-log
[OK] Operating on 64-bit architecture

-------- Storage Engine Statistics -------------------------------------------
[--] Status: +Archive -BDB -Federated +InnoDB -ISAM -NDBCluster 
[--] Data in MyISAM tables: 1005M (Tables: 335)
[--] Data in InnoDB tables: 143M (Tables: 68)
[--] Data in PERFORMANCE_SCHEMA tables: 0B (Tables: 17)
[!!] Total fragmented tables: 76

-------- Security Recommendations  -------------------------------------------
[OK] All database users have passwords assigned

-------- Performance Metrics -------------------------------------------------
[--] Up for: 1h 28m 55s (154K q [28.899 qps], 4K conn, TX: 3B, RX: 25M)
[--] Reads / Writes: 83% / 17%
[--] Total buffers: 192.0M global + 2.7M per thread (151 max threads)
[OK] Maximum possible memory usage: 597.8M (14% of installed RAM)
[OK] Slow queries: 0% (0/154K)
[OK] Highest usage of available connections: 5% (9/151)
[OK] Key buffer size / total MyISAM indexes: 16.0M/264.4M
[OK] Key buffer hit rate: 98.8% (77K cached / 912 reads)
[OK] Query cache efficiency: 87.2% (116K cached / 133K selects)
[!!] Query cache prunes per day: 5182
[OK] Sorts requiring temporary tables: 0% (0 temp sorts / 1K sorts)
[OK] Temporary tables created on disk: 24% (427 on disk / 1K total)
[OK] Thread cache hit rate: 99% (9 created / 4K connections)
[!!] Table cache hit rate: 9% (400 open / 4K opened)
[OK] Open file limit used: 61% (631/1K)
[OK] Table locks acquired immediately: 100% (18K immediate / 18K locks)
[!!] InnoDB data size / buffer pool: 143.3M/128.0M

-------- Recommendations -----------------------------------------------------
General recommendations:
    Run OPTIMIZE TABLE to defragment tables for better performance
    MySQL started within last 24 hours - recommendations may be inaccurate
    Increase table_cache gradually to avoid file descriptor limits
Variables to adjust:
    query_cache_size (> 16M)
    table_cache (> 400)
    innodb_buffer_pool_size (>= 143M)

鉴于上面的“要调整的变量”,我对 /etc/mysqld/my.cnf 做了以下更改:

  • 添加的行:key_buffer_size = 280M
  • 添加的行:innodb_buffer_pool_size = 150M
  • 取消注释table_cache并将其更改为 100(我会不断增加,直到超过 400)
  • 将值query_cache_size从 16M 更改为 32M

这里是否存在我忽略的明显问题或我应该做的事情?

答案1

您几乎没有任何交换空间(256M),作为临时措施,我会添加更多交换空间并降低交换量(vm.swappiness),以避免无用的 I/O 等待。SWAP 很慢,但它可以防止您的 PIDS 崩溃。此外,grep 出您的 OOM 并检查时间戳,以查看崩溃随时间推移是否有任何规律。我不得不在我的时间里调查一些制作拙劣的 cron 作业。如果您的 RAM 小于 8GB,我会确保至少有 2GB 的交换空间。就像我说的,交换会减慢速度,但这比崩溃数据库和丢失事务以及在启动时必须检查/修复表要好。

答案2

我猜你的问题实际上是 Apache 客户端太多,超出了服务器的内存。当流量激增时,Apache 进程会逐渐积累,最终耗尽所有 RAM。这会迫使操作系统开始强制交换进程,这往往会使情况变得更糟。最终,你的交换内存耗尽,操作系统会终止它认为最好的进程……在本例中是 MySQL,因为它使用了大量内存。请注意,增加交换内存只会延迟不可避免的崩溃。

我会首先MAXCLIENTS根据您服务器的能力将 Apache 的值降低到更合理的值。您可以通过运行top并查看进程RES/SHR的列来进行粗略估计httpd。它们之间的差异大致是每个子进程使用的内存量。例如,在我的服务器上,每个子进程的平均内存使用量为 40MB,而我希望 Apache 仅使用 3GB,因此我的MAXCLIENTS设置为 75(3000/40)。您可以根据需要调整此值和其他一些 Apache 连接设置,以防止 Apache 用尽所有 RAM 并开始进行交换。

您还可以从导致大量 Apache 客户端的原因的角度来看待它。如果这是真正的流量激增/峰值,那么您可能需要更大的服务器或更多服务器,或者添加缓存层以减少 Apache 上的负载。如果您的服务器太慢而无法处理正常数量的传入请求,您需要将 Apache 降低MAXCLIENTS到它实际上可以处理的水平,而不会出现请求备份。或者可能是服务器、应用程序或数据库问题导致锁定或冻结,需要找到并修复。

答案3

添加更多内存似乎是合乎逻辑的结论。

顺便说一句,你从来没有提到你是否将网站从多台不同的机器转移到一台机器上,或者所有的网站都在一台旧服务器上运行(有多少内存)。这些信息会非常有用,但我仍然认为你只是需要更多的内存。

相关内容