如何使`lua执行sudo命令而不需要手动输入密码`成为可能?

我正在使用LuaTorch训练模型。最近,我遇到了一个很烦人的问题。随着时间的推移,程序越来越慢!当我执行 sudo sysctl -w vm.drop_caches=3 然后程序运行得更快。然而,大约一天后,它又变慢了。我使用top检查缓存,发现它们很高。

第一个问题:在训练模型时,使用该命令释放缓存是否有影响? 我的初步想法是检查每个时期经过的时间,并在经过的时间长于预设值时调用该命令。

if time_elapse > time_out then
    os.execute('sudo sudo sysctl -w vm.drop_caches=3')
end

然而,第一次调用它需要手动输入密码。如何使用Lua代码避免手动输入代码?

点赞
用户300290
用户300290

直截了当回答您的问题:允许用户执行 sysctl -w vm.drop_caches=3 命令而不需要输入密码。

如果名为 naruto 的用户运行您的 Lua 脚本,请在 /etc/sudoers 中添加以下行(最好在 /etc/sudoers.d 中创建一个文件)。

naruto ALL=(ALL) NOPASSWD: /usr/sbin/sysctl -w vm.drop_caches=3

这将允许 naruto 以 root 的身份执行精确命令而不需要提供密码。

关于潜在的问题,这里还有更多需要检查的内容。通常情况下,您不应该删除页面缓存。它只是一个缓存,那些内存实际上并没有使用。请阅读 http://www.linuxatemyram.com/ 的非常有用的页面,特别是请查看该页面末尾的 警告标志 部分(如下面所引用的)。

警告标志 您可能需要检查以下真正的低内存情况:

  • 可用内存(或“free+缓存/缓冲器”)接近于零
  • 交换使用率增加或波动
  • dmesg | grep oom-killer 显示 OutOfMemory-killer 在运行。
2017-08-30 02:28:16
用户8469832
用户8469832

sysctl -w vm.drop_caches=3命令可能通过强制将交换页面返回到内存中加快了您的进程速度。这可能意味着您的系统过度使用交换机制。您可以通过修改vm.swappiness来配置交换策略。许多Linux发行版的默认值为60。尝试将其减少至10,以鼓励内核将您的进程留在内存中。维基百科上的swappiness页面提供了更详细的修改说明。这虽然没有回答您的直接问题,但可以帮助解决您的潜在问题。

2017-08-30 13:06:58