你几乎就在那里,无论是虚拟机还是物理机,这些设置总是可以改变的.
我将展示3种方法.
一些预先信息:
1)如果可能的话,最好以root身份执行.
2)/ unix上的proc不是一个真正的文件系统,它是一个内存内核文件系统,但它看起来像一个普通的磁盘文件系统.您可以将其称为“假文件系统”或“特殊文件系统”,您无法使用vi或任何其他编辑器编辑这些假文件,因为它们不是文件,它们看起来就像文件.几年前我遇到了同样的问题.
但是改变它们的价值很简单,只需要另外一种“机制”来编辑它们.
我会解释一下:
首先,需要是root 🙁 sudo确实在某些发行版中工作,但是在你尝试的其他发行版上没有,这第一种方法是通用的,适用于任何Linux,macOS或任何基于Unix的.希望你有权访问root密码.
继续进行:
$su root
输入root密码.
现在你是root用户,让我们检查一下当前的值:/ proc / sys / vm / max_map_count
$cat /proc/sys/vm/max_map_count
65536
让我们改变它:
echo 262144 > /proc/sys/vm/max_map_count
我们来验证:
cat /proc/sys/vm/max_map_count
262144
完成!
它已经应用并且功能齐全.通过更改/ proc下的任何伪文件的值,设置立即变为活动状态.但重启后它们不会持续存在.您可以在elasticsearh或任何其他应用程序或系统指标上使用值并测量性能更改.去调整您的系统,在一些纸上写下值,保持最佳值.如果出现任何错误,请重新启动并重新启动它们,然后重新启动,直到所有希望的值都达到最佳值. / proc下有很多磁盘和内存可调参数.如果你能很好地调整它们(并且有时间),它们会带来巨大的差异和性能提升.你是正确的方式.
满意后,让它们永久化:
第一种方法:
使用/etc/rc.local
vi /etc/rc.local
将所有参数放在rc.local文件中,例如:
echo 220000000 > /proc/sys/vm/dirty_background_bytes
echo 320000000 > /proc/sys/vm/dirty_bytes
echo 0 > /proc/sys/vm/dirty_background_ratio
echo 0 > /proc/sys/vm/dirty_ratio
echo 500 > /proc/sys/vm/dirty_writeback_centisecs
echo 4500 > /proc/sys/vm/dirty_expire_centisecs
echo 1 > /proc/sys/net/ipv4/tcp_rfc1337
echo 10 > /proc/sys/vm/swappiness
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo 120 > /proc/sys/net/ipv4/tcp_keepalive_time
echo 0 > /proc/sys/vm/zone_reclaim_mode
echo deadline > /sys/block/sda/queue/scheduler
echo 8 > /sys/class/block/sda/queue/read_ahead_kb
echo 1048575 > /proc/sys/vm/max_map_count
退出vi编辑器保存文件.
在登录提示显示之前,所有初始化服务启动后,每次重新启动时都会设置这些参数.
(/ etc / rc.local文件在所有启动linux服务之后执行,如果elasticsearch在它作为服务之前启动它可能不起作用,但是如果你将来需要这个方法在另一个设置上有用,或者你可以像这样使用将它们放在elasticsearch init脚本中,因为init脚本以root身份运行,所以它与上面的init脚本中使用的语法相同)
您也可以立即复制它们并粘贴它们以进行即时更改.上面的参数在我的apache cassandra服务器上有效,调整并运行.
如果您愿意,可以尝试将它们作为调整您自己的起点.
使它们永久化的第二种方法:
现在将在Linux上的任何启动服务之前设置参数.
编辑/etc/sysctl.conf,将参数放入其中
vm.max_map_count=1048575
vm.zone_reclaim_mode=0
vm.dirty_background_bytes=220000000
vm.dirty_background_ratio=0
vm.dirty_bytes=320000000
vm.dirty_ratio=0
vm.swappiness=10
继续与其他人保持联系,保存/etc/sysctl.conf,重新启动服务器以应用更改,或执行:sysctl -p以应用更改而不重新启动.他们将在重新启动时永久保持.
上面两种方法是最常见的.还有一个,它可能适合你,它是通过使用sudo,几乎就像你在做:
代替:
sudo sysctl -w vm.max_map_count=262144
尝试:
echo 262144 | sudo tee /proc/sys/vm/max_map_count
它适用于ubuntu.
校验:
user@naos:~$cat /proc/sys/vm/max_map_count
262144
希望我有所帮助,至少通过提供3种不同的方案来解决问题,因为你的问题已经差不多一年了;)
问候,拉斐尔普拉多