zoukankan      html  css  js  c++  java
  • MySQL -- 内存使用监控详解

    问题:

      1、我们怎么确定MySQL的各个部分分别使用了多少内存?

      2、当有MySQL由于内存泄露引起OOM时、我们怎么提前发现?

    怎么监控MySQL内存使用:

      答案是通过performance_schema来完成、具体的做法如下:

    第一步: 配置performance_schema使它开启内存方面的监控

      在/etc/my.cnf中增加如下内容

    ####  for performance_schema
    performance_schema                                                      =on    #    on
    performance_schema_consumer_events_stages_current                       =on    #    off
    performance_schema_consumer_events_stages_history                       =on    #    off
    performance_schema_consumer_events_stages_history_long                  =off   #    off
    performance_schema_consumer_statements_digest                           =on    #    on
    performance_schema_consumer_events_statements_current                   =on    #    on
    performance_schema_consumer_events_statements_history                   =on    #    on
    performance_schema_consumer_events_statements_history_long              =off   #    off
    performance_schema_consumer_events_waits_current                        =on    #    off
    performance_schema_consumer_events_waits_history                        =on    #    off
    performance_schema_consumer_events_waits_history_long                   =off   #    off
    performance_schema_consumer_global_instrumentation                      =on    #    on
    performance_schema_consumer_thread_instrumentation                      =on    #    on
    performance-schema-instrument                                           ='memory/%=COUNTED'

    第二步:重启mysql数据库

    systemctl restart mysql

      这里要重启MySQL的主要是因为,许多的内存是在启动MySQL的时候就分配好了的,如果我们在MySQL启动完成后再通过

      performance_schema.setup_instrument表来配置内存相关的监控的话,就是漏掉一些内存没有监控到。

    第三步:通过performance_schema查询内存的使用情况

    mysql> SELECT SUBSTRING_INDEX(event_name,'/',2) AS code_area, sys.format_bytes(SUM(current_alloc)) AS current_alloc
        -> FROM sys.x$memory_global_by_current_bytes GROUP BY SUBSTRING_INDEX(event_name,'/',2) ORDER BY SUM(current_alloc) DESC;
    +---------------------------+---------------+
    | code_area                 | current_alloc |
    +---------------------------+---------------+
    | memory/innodb             | 1.47 GiB      |
    | memory/performance_schema | 131.51 MiB    |
    | memory/mysys              | 8.22 MiB      |
    | memory/sql                | 3.19 MiB      |
    | memory/memory             | 213.15 KiB    |
    | memory/myisam             | 171.79 KiB    |
    | memory/csv                | 512 bytes     |
    | memory/blackhole          | 512 bytes     |
    +---------------------------+---------------+
    8 rows in set (0.00 sec)

      1、从上面的结果我们可以知道innodb、performance_schema、mysys ... 它们共用了多少内存了、如果某一类组件的内存使用没有节制的增长上去、多半

      它就是内存泄露了。 对于这种情况只能是升级MySQL到更高的版本了。

    目前performance-schema相关的配置模板已经增加到mysqltools当中

      https://github.com/Neeky/mysqltools/blob/master/deploy/ansible/mysql/template/5.7/my.cnf

    ----------------------------------------------------------------------------

    ----------------------------------------------------------------------------

  • 相关阅读:
    HTB-靶机-Lazy
    HTB-靶机-Brainfuck
    HTB-靶机-October
    java编程思想-java注解
    HMAC的JAVA实现和应用
    HMACSHA1算法的JAVA实现
    常见软件安全漏洞样例代码
    [移动应用安全]移动应用安全培训PPT
    [标准性文档]WEB应用安全验证标准
    [安全测试报告]针对某厂商的一次渗透性测试
  • 原文地址:https://www.cnblogs.com/JiangLe/p/8663032.html
Copyright © 2011-2022 走看看