Java查看Redis内存使用情况

标签 java memory redis

我需要 Java 代码来监控 Redis 的内存使用情况,因为 Redis 将所有数据存储在 RAM 中,如果内存已满,它会崩溃。

看起来 Redis 使用了整个操作系统内存,所以如果我在 Java 中使用“运行时”方法,这是不正确的,因为它只计算 JVM 中的内存。

是否有任何 Java 方法可以监控整个 OS 系统的内存使用情况,或者这些是一些神奇的 Redis 方法?

最佳答案

您可以定期向 Redis 发出请求,发送 INFO命令,解析结果得到used_memory的值,即Redis内存分配器分配的字节数。

更新:Redis 不会崩溃,它会交换 - 因此它的性能会急剧下降。您可以通过比较 used_memory_rss 和 used_memory 来检测交换。 used_memory_rss 比 used_memory 大得多意味着发生了交换。但在此之前,如果 used_memory 刚好低于 Redis 可用的总内存,您可能需要进行交换。

如果您使用 redis 作为缓存,您可以通过在配置文件中添加这些行来限制它的内存消耗:

maxmemory 2mb 
maxmemory-policy allkeys-lru

在此示例中,它将被限制为 2 Mb。

更新 maxmemory 将在达到限制时阻止新的写入操作,并以错误响应;并根据LRU策略开始删除key,适合缓存。

关于Java查看Redis内存使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22257700/

相关文章:

java - 无法在 Android 中读取/写入 SD 卡

java - Guice 辅助注入(inject)过度使用替代方案,依赖注入(inject)与非 DI 构造函数

无法分配内存

c - Linux上 `ru_maxrss`的单位是什么?

JBoss 7.1.1 + 弹性缓存?

docker - 如何在通过 CircleCI 运行的 Ubuntu 中启动 Redis

java - 如何使用 swing 制作类似调色板的菜单?

java - 线程安全映射操作

c - 未请求分配的内存

ruby-on-rails - 测试使用 .delay 时是否创建了 Sidekiq 作业