我需要 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/