【发布时间】:2019-05-25 00:39:41
【问题描述】:
我在内存有限的服务器上运行 Cassandra(一个 Java 进程)。我编辑 Cassandra 的配置 (config/jvm.options) 以将这些参数传递给 Java 虚拟机,以限制堆大小。
-Xms180M -Xmx180M
我可以在ps ax | grep java 的输出中看到它们,它显示:
[...] /usr/lib/jvm/java-8-openjdk-amd64/bin/java [...]
-Xms180M -Xmx180M [...] org.apache.cassandra.service.CassandraDaemon
但它似乎使用了超过 180MB 的空间,并且另一个服务器进程不断消失。我猜由于内存有限,内核正在杀死另一个进程。
这是top中的一块屏幕:
KiB Mem : 1009128 total, 87072 free, 643488 used, 278568 buff/cach
KiB Swap: 0 total, 0 free, 0 used. 222228 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
20410 cassand+ 20 0 2048132 433828 8456 S 0.3 43.0 41:25.22 java
RES 433828 不是意味着 Cassandra 使用了 433 MB 的 RAM 吗?在我将 Java 堆限制为 180 MB 之后,这似乎可行吗?如果堆被限制为 180 MB,那么其他 433-180 = 253MB 是什么?我也可以限制吗?
【问题讨论】:
-
"my server, which has limited memory" - 假设这是一个与工作相关的问题,你已经花在这上面的时间的货币价值远远超过额外内存的成本。当服务器有几十 GB 的内存时,担心几百 MB 是不划算的。
-
是的,这是杰夫·贝佐斯富有的原因之一。 :) 这更像是一个个人项目,尽管这可能会改变。我可能会升级我的 Digital Ocean 服务器,但我想先了解问题所在,所以它不会简单地用完额外的 RAM 并让我留在原地。
标签: java cassandra heap-memory