我正在使用 Solaris 10,并且我向服务器的 crontab 添加了许多 cronjobs。
目前我的 crontab 中有 30 个 cronjobs。
一个 cronjob 需要8小时要完成另一个 cron 作业需要5个小时完成它,其余的都是普通的 cronjobs(最多需要 30 分钟)
由于它是生产服务器,我担心服务器的性能。
- 它们与我的服务器的性能有何关系?
- cronjobs 的数量有上限吗?
答案1
简短回答:是的。
更长的答案:
- 依赖于取决于什么cronjobs 会做并且什么时候他们这样做,即在晚上运行计算量大(性能下降)的任务(或者当没有人在办公室时,取决于服务器的用途)不会造成伤害(如果它们在办公时间之前完成,当然)。
- 如果有限制(我不确定),它可能会远远超过 30。无论如何,有那么多 cronjobs 似乎有点不常见(如果我错了,请有人纠正我),但如果没有更多信息,就不可能说一下是否有更好的解决方案。
(这只是答案的第一个近似值,我怀疑它是否可以在这种普遍性中得到完全回答。)
您还可以阅读nice
(不确定它是否存在于 Solaris 上)。这Solaris 资源管理 (1),(2)听起来也很有用,具体取决于您的工作类型。
答案2
当然,cron 作业会以某种方式影响性能。如果一个 cron 作业需要 8 小时,那么它很可能在做一些大事。但是什么呢?这就是问题所在。
如果您有多个争夺资源的后台作业,则它们将需要更长的时间才能完成。例如,如果您有一个 8 小时的作业和一个 5 小时的作业分开进行,那么如果您同时运行它们并且它们争夺相同的资源(磁盘 I/O、网络带宽、RAM,...)。相反,如果它们使用不同的资源(例如,一个受 CPU 限制,另一个受磁盘限制),则如果您在午夜启动它们,它们可能会在上午 8 点完成。
因此,分散密集型工作的规则是广泛分配资源。弄清楚每个作业需要什么(磁盘 I/O、网络带宽、RAM、CPU 等),然后制定一个时间表,以便不存在资源争用。例如,如果您有 4GB RAM,作业 #1 需要 2GB,作业 #2 和作业 #3 各需要 2GB,正常服务器操作需要 2GB,那么请确保作业 #1 不会与作业 #2 同时运行和#3,但是同时运行#2 和#3 是可以的。通常,您应该一次运行一个磁盘密集型作业,除非您有不同的作业访问不同的磁盘池。 CPU 可以共享,没有任何开销,只需确保有一些剩余用于前端操作(nice
可以提供帮助)。