-
Notifications
You must be signed in to change notification settings - Fork 330
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
配置了内存上限,压力测试后内存不释放 #167
Comments
请问楼主,内存不释放这个问题,你后面怎么解决的? |
还没解决 |
哎,腾讯的开发反馈太慢了。 |
Tendis 的内存占用 主要在 RocksDB 上, RocksDB 的内存 主要分为下面三大块:
如果想减少内存占用, 就需要减少上面三快的内存开销:
目前从你给出的一些信息, 内存总共占用了 1.7GB, RocksDB 占用大概 600MB, 所以还有 1G 左右的内存开销 不清楚。 |
把一些数据缓存到内存,是能够提高效率,当不用的时候,内存是不是应该释放出来呢? |
从系统开发的角度来看 确实应该。 比如 block cache 缓存一些 block, 当 block 对应的 SST 删除时, 这个 block 不会被使用, 就应该 被释放出来, RocksDB 也是这么实现的。 |
嗯就是楼主说的问题,当压测完毕后,比如内存使用了15G,压测完毕后,如果没有继续调用的话,应该逐步释放内存。这个问题很好复现的,把master代码编译一把,随便压测一下,就可以看到这个现象。 |
今上午又压测了一遍,内存维持在1.6G 不释放
jeprof 导出的pdf文件 |
这些参数都是默认值, 没有修改 |
数据库内存永远应该释放、减少物理IO、 |
@luxinle |
这个内存占用是正常的哦,也不能释放的。 |
这都快一年了,我早就不用这个玩意了,内存占用大小,有没有释放都不重要了 |
tendis节点内存占用最主要就是两块,blockcache和memtable,具体计算公式就是: 另外,如果配置rocks.cache_index_and_filter_blocks=false,则索引和布伦过滤器的内存消耗不在rocks.blockcachemb的控制之下,会有额外的内存占用。如果希望内存可控,可以配置rocks.cache_index_and_filter_blocks=true,将索引和布伦过滤器放到blockcache里面去。 |
所以按照这个逻辑 tendis 的内存占用最小也要1280M 也就是1.2G (在rocks.blockcachemb配置很小 1M) |
对的。可以配置rocks.write_buffer_size 8MB,这样内存就大幅度减少了,大约就是200MB了。 |
这个公式算出的值是不是约等于info memory看到的used_memory_rss的值 |
我提到的几个参数,你分别配的多少 |
|
跟进程发一个jeprof dump命令,会生成一个类似jeprof.26397.4.m4.heap文件。再转一下pdf,把pdf发来看看: |
(跟进程发一个jeprof dump命令,会生成一个类似jeprof.26397.4.m4.heap文件)没有使用过jeprof这个工具,没明白怎么操作,能麻烦给一个完整的例子吗?
直接退出了 |
redis-cli -h * -s * -a * jeprof dump // 用客户端发一个jeprof dump命令到节点,会生成一个类似jeprof.26397.4.m4.heap文件 关于jeprof,网上有很多资料,建议学一学。 |
另外,可以编译tendisplus二进制的时候,去掉jemalloc试试,jemalloc里面可能会有一些内存的开销。 |
生成了 |
这个指的是编译tendis的时候吧。 |
对 |
test.pdf的统计结果: 理论内存占用: rocks.cache_index_and_filter_blocks 改成 true 试试。怀疑是索引和过滤器的内存不在blockcache大小的控制之下。 |
加你qq了,方便沟通一点 |
你好,请问一下这个问题解决了吗 |
rocks.cache_index_and_filter_blocks=1 |
@takenliu 如果根据这个公式调整参数适当的提高内存占用,能否提升一定的性能呢 |
在一台机械硬盘的机器上部署的tendisplus-2.4.2,单实例部署,进行压测测试。配置了内存上限, 但是内存没有被限制住,一路涨到了1.7G,而且长时间没有释放
应用场景,是因为redis 数据做实时落地不方便,想要用tendis替换redis,对延迟要求不是特别高,但是想限制内存使用。现在是在内网测试,线上会部署到云上,硬盘会使用高性能云盘。压力测试期间 只有一个client连接。
所以想请问一下 怎样限制内存使用,或者如何释放内存
配置文件
info 信息
The text was updated successfully, but these errors were encountered: