我使用5.6.21-70.0进行性能测试。
当我跑步时
mysqlslp-a--并发=40--查询次数1000次--迭代=500次--引擎=innodb--debug-info-utest-p
做一些性能测试,ram增长超过最大内存使用量,永不释放
当完成mysqlslap时,内存显示使用78%
我有1G物理内存,不使用交换
KiB Mem:总共1016656个,使用953808个,免费62848个,30324个缓冲区
KiB交换:总计0,使用0,自由0。41384缓存内存
PID USER PR NI VIRT RES SHR S%CPU%MEM TIME命令26049 mysql 20 0 1544156 778316 3992 S 16.3 76.6 6 6:24.01 mysqld
**mysqld似乎使用了大约700M内存?为什么超过了最大内存使用量?为什么mysql从不释放内存**
我的mysqlturning。pl显示:
[确定]可用连接的最高使用率:70%(42/60)
[确定]键缓冲区大小/总MyISAM索引:32.0M/98.0K
[-]读/写:40%/60%
[-]总缓冲区:336.0M全局1.1M/线程(最多60个线程)
[确定]最大可能内存使用量:403.5M(占已安装RAM的40%)
----------------------
BUFFER POOL AND MEMORY
----------------------
Total memory allocated 274726912; in additional pool allocated 0
Total memory allocated by read views 96
Internal hash tables (constant factor + variable factor)
Adaptive hash index 4446416 (4425832 + 20584)
Page hash 277432 (buffer pool 0 only)
Dictionary cache 1170261 (1107952 + 62309)
File system 815920 (812272 + 3648)
Lock system 665656 (664936 + 720)
Recovery system 0 (0 + 0)
Dictionary memory allocated 62309
Buffer pool size 16383
Buffer pool size, bytes 268419072
Free buffers 1024
Database pages 15358
Old database pages 5649
Modified db pages 0
Pending reads 0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 407, not young 484
0.00 youngs/s, 0.00 non-youngs/s
Pages read 614, created 17947, written 20737
0.00 reads/s, 0.00 creates/s, 0.00 writes/s
No buffer pool page gets since the last printout
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 15358, unzip_LRU len: 0
I/O sum[0]:cur[0], unzip sum[0]:cur[0]
我的,我的。cnf公司----
# Generated by Percona Configuration Wizard (http://tools.percona.com/) version REL5-20120208
[mysql]
# CLIENT #
port = 3306
socket = /data/data/mysql.sock
[mysqld]
# GENERAL #
user = mysql
default-storage-engine = InnoDB
socket = /data/data/mysql.sock
pid-file = /data/data/mysql.pid
character-set-server=utf8
collation-server=utf8_general_ci
# MyISAM #
key-buffer-size = 32M
myisam-recover = FORCE,BACKUP
# SAFETY #
max-allowed-packet = 16M
max-connect-errors = 1000000
skip-name-resolve
sql-mode = STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ONLY_FULL_GROUP_BY
sysdate-is-now = 1
innodb = FORCE
# DATA STORAGE #
datadir = /data/data/
# BINARY LOGGING #
log-bin = /data/data/mysql-bin
expire-logs-days = 14
sync-binlog = 1
# CACHES AND LIMITS #
tmp-table-size = 32M
max-heap-table-size = 32M
query-cache-type = 0
query-cache-size = 0
max-connections = 60
thread-cache-size = 50
open-files-limit = 65535
table-definition-cache = 1024
table-open-cache = 2048
# INNODB #
innodb-flush-method = O_DIRECT
innodb-log-files-in-group = 2
innodb-log-file-size = 64M
innodb-flush-log-at-trx-commit = 1
innodb-file-per-table = 1
innodb-buffer-pool-size = 64M
# LOGGING #
log-error = /data/data/mysql-error.log
log-queries-not-using-indexes = 0 # slow will not log the query which do not use index
long-query-time = 1
slow-query-log = 1
slow-query-log-file = /data/data/mysql-slow.log
尝试在InnoDB表上运行FLUSH TABLES
它将关闭针对. ibd文件的文件。我希望它会释放内存使用!!
你可能正在使用一台32位的机器,它通常提供3G左右的数据,但你使用了40%的物理内存,这已经足够了,但我认为你需要扩展呼吸空间,你肯定需要允许缓冲区大小略大于数据或索引页的大小。
尝试使用64位机器,使用交换将使它更容易呼吸,包括更大大小的数据/索引大小的缓冲池。
我已经发现为什么内存泄漏发生。现在我只有1GB内存,没有交换。
performance_schema导致在启动时分配大约400M的内存。
因为my.cnf使用
table-definition-cache= 1024
table-open-cache= 2048
max-connections= 60
会造成高performance_schema分配,更多信息请看
REF1
参考文献2
问题内容: 好的,所以我的程序有很多(〜300)线程,每个线程都与中央数据库通信。我创建了一个与数据库的全局连接,然后每个线程进行其业务创建语句并执行它们。 一路上的某个地方,我发生了大量内存泄漏。在分析堆转储之后,我看到com.mysql.jdbc.JDBC4Connection对象为70 MB,因为它在“ openStatements”(哈希映射)中有800,000个项目。在某个地方,它不能正
我想了解为什么多次动态分配调用的数据比直接在代码中指定的或通过的单个调用分配的数据使用如此多的内存。 例如,我用C编写了以下两个代码: 测试1.c:int x用malloc分配 我在这里没有使用free来保持简单。当程序等待交互时,我查看另一个终端中的顶级功能,它向我显示了以下内容: test2. c: int x不是动态分配的 顶部显示: 我还编写了第三个代码,其结果与test2相同,我在tes
内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏大家都不陌生了,简单粗俗的讲,就是该被释放的对象没有释放,一直被某个或某些实例所持有却不再被使用导致 GC 不能回收 我会从 java 内存泄漏的基础知识开始,并通过具体例子来说明 Android 引起内存泄漏的各种原因,以及如何利用工具来分析应用内存泄漏,最后再做总结。 篇幅有些长,大家可以分几节来看! Java
一、内存溢出 一种程序运行出现的错误。 当程序运行需要的内存超过了剩余的内存时, 就出抛出内存溢出的错误。 二、内存泄漏 占用的内存没有及时释放。 内存泄露积累多了就容易导致内存溢出。 常见的内存泄露: 意外的全局变量。 没有及时清理的计时器或回调函数。 闭包 // 1. 内存溢出 var obj = {} for (var i = 0; i < 10000; i++) { obj[i] =
问题内容: 我认为我的android应用正在泄漏内存。我不是绝对确定这是问题所在。 应用程序打开时经常崩溃,并且logcat尝试加载位图图像时会显示“内存不足”异常。 崩溃后,我重新打开了该应用程序,它运行正常。Logcat会显示许多“ gc”,并且JIT表会不时地向上调整大小,而不会向下调整,直到应用程序因内存不足错误而崩溃。 这听起来像是内存泄漏吗?如果是这样,我该如何定位和关闭泄漏点。 这是
问题内容: 我一直在追寻内存泄漏(由“ valgrind –leak-check = yes”报告),它似乎来自ALSA。这段代码已经存在于自由世界中一段时间了,所以我猜这是我做错的事情。 输出看起来像这样: 并继续一些页面 这是由于我在一个项目中使用ALSA并开始看到这种巨大的泄漏……或者至少是所说泄漏的报告。 所以问题是:是我,ALSA或valgrind在这里遇到问题吗? 问题答案: ht