我们有一个由 265 台 Linux RHEL 机器组成的 Hadoop 集群。
在总共 265 台机器中,我们有 230 台数据节点机器配备了 HDFS 文件系统。
每个数据节点上的总内存为 128G,我们在这些机器上运行许多 spark 应用程序。
上个月我们添加了另一个 spark 应用程序,因此该过程从数据节点机器占用了更多的内存。
我们注意到缓存、内存是非常重要的部分,当机器上运行更多进程时,正确的结论是添加更多 RAM 内存。
由于我们无法在未来5-6个月内将内存升级到256G,因此我们正在考虑如何尽可能提高RHEL机器和内存现金的性能。
根据我们的经验,内存 Casch 对于应用程序的稳定性非常重要。
一种选择是清除 RAM 内存缓存和缓冲区,如下所示。
1. Clear PageCache only.
# sync; echo 1 > /proc/sys/vm/drop_caches
2. Clear dentries and inodes.
# sync; echo 2 > /proc/sys/vm/drop_caches
3. Clear PageCache, dentries and inodes.
# sync; echo 3 > /proc/sys/vm/drop_caches
并从 cron 运行它们,如下所示。(来自https://www.wisenschaft.com.ng/blog/how-to-clear-ram-memory-cache-buffer-and-swap-space-on-linux/)
#!/bin/bash
# Note, we are using "echo 3", but it is not recommended in production instead use "echo 1"
echo "echo 3 > /proc/sys/vm/drop_caches"
Set execute permission on the clearcache.sh file.
# chmod 755 clearcache.sh
Now you may call the script whenever you required to clear ram cache.
Now set a cron to clear RAM cache everyday at 2am. Open crontab for editing.
# crontab -e
Append the below line, save and exit to run it at 2am daily.
0 2 * * * /path/to/clearcache.sh
但由于我们讨论的是生产数据节点机器,所以我不太确定上述设置是否安全,并且它们提供了(?)一些解决方案,直到我们可以将内存从 128G 增加到 256G
我们能了解一下您对我所写内容的想法吗?
如果“清除 RAM 内存缓存”是内存升级前的正确临时解决方案
答案1
千万不要这么做。
在生产工作负载中,没有必要触碰drop_caches
。在 Linux 上,当需要内存时,文件缓存是首先自动回收的东西之一。这很可能会丢弃快速 DRAM 中的数据,并且需要从较慢的存储中进行更多读取。
获得良好的监控工具来收集内存压力失速信息。这量化了过度使用内存可能造成的延迟。并且对确定主机队列的大小非常有效。在内存升级之前,使用它来告知您自己的容量规划,了解安全工作负载的极限在哪里。