Par*_*dhi 2 cassandra cassandra-3.0
我们有一个跨 2 个不同数据中心的 12 节点 cassandra 集群。我们正在通过网络应用程序将数据从 sql DB 迁移到 cassandra,还有另一个 .net 应用程序从 cassandra 读取数据。最近,我们看到一个或另一个节点出现故障(nodetool 状态显示 DN 并且其上的服务已停止)。以下是 nodetool 状态的输出。我们必须启动该服务才能再次使其正常工作,但它再次停止。
https://ibb.co/4P1T453
Run Code Online (Sandbox Code Playgroud)
日志路径: https: //pastebin.com/FeN6uDGv
因此,在查看您的 Pastebin 时,我发现了一些可以调整的内容。
\n\n首先,我有理由确定这是您的主要问题:
\n\nUnable to lock JVM memory (ENOMEM). This can result in part of the JVM being swapped out,\nespecially with mmapped I/O enabled. Increase RLIMIT_MEMLOCK or run Cassandra as root.\nRun Code Online (Sandbox Code Playgroud)\n\n来自GNU 错误代码:
\n\n\n\n\n宏:int ENOMEM
\n\n\xe2\x80\x9c无法分配内存。\xe2\x80\x9d 系统无法分配更多虚拟内存,因为其容量已满。
\n
-Xms12G, -Xmx12G, -Xmn3000M,\nRun Code Online (Sandbox Code Playgroud)\n\n您的实例有多少 RAM?据我所知,您的节点因 OOM(内存不足错误)而死亡。我的猜测是,您为堆指定了过多的 RAM,而操作系统/页面缓存的内存不足。事实上,我不会将超过 50%-60% 的 RAM 分配给堆。
\n\n例如,我主要在 16GB RAM 上构建实例,并且我发现 10GB 最大堆大约与您想要的一样高。
\n\n-XX:+UseParNewGC, -XX:+UseConcMarkSweepGC\nRun Code Online (Sandbox Code Playgroud)\n\n事实上,当您使用 CMS GC 时,我不会将最大堆大小设置为高于 8GB。
\n\nMaximum number of memory map areas per process (vm.max_map_count) 65530 is too low,\nrecommended value: 1048575, you can change it with sysctl.\nRun Code Online (Sandbox Code Playgroud)\n\n这意味着您还没有调整您的limits.conf或sysctl.conf。检查指南(DSE 6.0 - 推荐的生产设置),但通常最好将以下内容添加到这些文件中:
/etc/limits.conf
\n\n* - memlock unlimited\n* - nofile 100000\n* - nproc 32768\n* - as unlimited\nRun Code Online (Sandbox Code Playgroud)\n\n/etc/sysctl.conf
\n\nvm.max_map_count = 1048575\nRun Code Online (Sandbox Code Playgroud)\n\n注意:调整 sysctl.conf 后,您需要运行sudo sysctl -p或重新启动。
Is swap disabled? : false,\nRun Code Online (Sandbox Code Playgroud)\n\n您将需要禁用交换。如果 Cassandra 开始将 RAM 的内容交换到磁盘,事情会变得非常慢。运行 a swapoff -a,然后编辑/etc/fstab并删除所有交换条目。
太长;博士;概括
\n\nlimits.confansysctl.conf文件。希望这可以帮助!
\n| 归档时间: |
|
| 查看次数: |
2338 次 |
| 最近记录: |