我在不允许使用的Linux服务器上工作cron
。因此,为了避免这种情况,我编写了需要在确定的时间运行的脚本,如下所示:
while true
do
...
...
sleep 1d #changes upon requirement of my script
done
我总是在后台启动脚本nohup ./script.sh &
。
我的问题是,说我在服务器上运行着这样的六个/七个脚本-大多数情况下它们会处于休眠状态。这sleep
会消耗某种内存吗?它会影响服务器的性能吗?有什么有效的方法来解决这个问题吗?
是的-您正在使用这些脚本消耗内存。实际上,您正在使用内存运行两个进程:
sleep
本身。sleep
将会非常轻巧,但是shell可能会消耗几兆字节的内存。在我的系统上,空闲的非交互式bash消耗〜1MiB,而睡眠0.7MiB。您可以检查ps
或top
(查看RSS列)-尽管实际上总数中有很多是像库之类的东西,使用它们的所有进程之间都共享这些库。总而言之,每个值可能小于1MiB。
在Linux上,您可以从/proc/pid/status
(和/proc/pid/smaps
)获取更多详细信息;这些Vm*
在这里很有趣。例如:
bash -c 'grep Vm /proc/$$/status'
VmPeak: 13380 kB
VmSize: 13380 kB
VmLck: 0 kB
VmPin: 0 kB
VmHWM: 972 kB
VmRSS: 972 kB
VmData: 220 kB
VmStk: 132 kB
VmExe: 208 kB
VmLib: 2320 kB
VmPTE: 48 kB
VmPMD: 12 kB
VmSwap: 0 kB
您可以看到总计972 kB的RSS(已使用的RAM量),其中220 kB是“数据”(通常不共享),而132 kB是堆栈(也不共享)。因此,每次额外运行的重击都非常小。
一些建议:如果您必须执行许多这样的解决方法...为什么不能使用cron?这是一种更简单,更清洁的方法,几乎不会出现意想不到的错误(快速!如何sleep 1d
处理夏时制?如果您的睡眠较早返回是因为SIGTERM是重新启动/关闭的一部分,会发生什么情况?)。如果您的系统管理员担心未经授权的人员安排cron作业,请将他/她指向/etc/cron.allow
和/etc/cron.deny
;这些文件记录在crontab(1)中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句