acm-header
登录

ACM通信

Kode恶性

淹没了自动化


淹没在自动化,插图

信贷:伊戈尔Terekhov

回到顶部亲爱的KV

作为最近推动从测试构建到文档更新的所有自动化的一部分,我的团队应一个开发团队的请求部署了一个作业调度系统。部署背后的想法是,任何人都应该能够设置一个周期性的工作来运行,以完成一些需要很长时间的工作,但这对公司的日常工作不是绝对关键的。这是一种避免人们逃跑的方法cron工作在他们的桌面上,并提供一组集中的后台处理服务。

不过,这个系统有几个问题。首先,它是非常占用资源的,特别是在内存使用方面。第二,我们组中没有人知道它是如何工作的,或者它是如何实际使用的,而只知道如何在我们的服务器上部署它,每星期左右就会有人以一种新的和意想不到的方式使用系统,这就会破坏之前所有用户的系统。使用系统的人太忙了,没有时间解释他们是如何使用它的,这实际上违背了我们首先部署它以节省他们时间的主要原因。文档也不是很好。支持该系统的团队中没有人有时间阅读和理解源代码,但是我们必须做一些事情来了解系统如何工作以及它如何扩展,以便从这些代码中拯救我们自己。您能告诉我们如何在不陷入代码泥潭的情况下继续吗?

淹没

回到顶部

亲爱的淹没

所以你的团队中了“只要安装这个软件,一切就会很棒”的圈套。这是一个老把戏,仍然困扰着系统管理员和其他在开发人员周围担任支持角色的人。每当有人让你相信他们的时候,别相信。尽管这可能有点愤世嫉俗,但总比上当受骗要好。

但现在你们已经被骗了,你们要怎么让自己摆脱?虽然费力地通过数千行来源可疑的未知代码是解决这类问题的正常方法——有点像“吸收它”的努力,但还有一些其他的方法试图理解系统,而不是从起点main ()读取每个函数。

第一种方法是为您自己构建第二个系统,并为您的环境创建一组典型的测试作业。第二种方法是使用现有的系统来测试你能把它推进多远。在这两种情况下,您都需要对机器进行测量,这样就可以测量做功对系统的影响。

一旦有了一组测试作业,或者正在生产机器上运行,就可以测量每一个作业对系统的影响。在你最初的问题中,你说记忆是作业控制系统大量使用的东西之一,所以这是我们首先要考虑的。当您添加作业时,系统使用多少实际内存(而不是虚拟内存)?如果你增加两个工作,需要两倍的费用吗?三个呢?内存使用规模如何?一旦您可以绘制内存使用规模的图表,您就可以在出现内存问题之前了解系统需要做多少工作。您应该继续增加工作,直到系统开始交换,此时您将知道系统的内存限制。

不要犯只尝试一两个作业的错误——一直到系统的极限,因为只有少量的工作是找不到效果的。如果系统在一个或两个任务中失败了,您根本就不会部署它,对吗?请告诉我那是对的。

另一件要衡量的事情是工作结束时会发生什么。内存被释放了吗?在大多数现代系统中,直到另一个程序需要内存时,才会看到内存被释放,因此必须通过运行作业进行测试,直到系统交换,然后删除所有作业,然后再次添加相同数量的作业。在预热运行后,系统是否与更少的作业交换?系统可能存在内存泄漏。如果您不能修复泄漏,那么您将需要定期重启系统,因为您不太可能有时间自己找到泄漏。

当您试图理解系统如何伸缩时,最好看看它是如何使用内存以外的资源的。所有系统都有简单的工具来查看CPU利用率,当然,您应该确保作业控制系统占用所有CPU时间,因为这会增加总系统开销。


当您试图理解系统如何伸缩时,最好看看它是如何使用内存以外的资源的。


系统使用的文件和网络资源可以通过以下程序来理解netstat而且procstat,以及lsof。系统是否打开了很多文件,然后就不管它们了?这是一种资源浪费,您需要了解这一点,因为大多数操作系统都限制一个进程可以打开的文件的数量。系统磁盘是密集的,还是使用锁文件进行大量工作?使用大量锁文件的系统需要在本地非网络磁盘上为锁文件提供空间,因为网络文件系统特别不擅长文件锁定。

一个相当激烈的措施,也是我赞成的,就是使用ktrace, strace,尤其是DTrace弄清楚程序对系统做了什么。前两个肯定会降低它们所测量的系统的速度,但它们可以快速地向您显示程序正在做什么,包括它在等待I/O完成时发出的系统调用,加上它正在使用的文件,以及其他细节。在支持DTrace,跟踪的开销减少了,并且在对延迟不敏感的系统上,可以进行更多的跟踪DTrace比用ktracestrace.甚至还有剧本,dtruss,提供DTrace,这就像ktracestrace,但这有较低的开销DTrace.如果您想知道一个程序在做什么,而不需要小心翼翼地查看源代码,我强烈建议使用某种形式的跟踪。

最后,理解系统的目标总是更好的,但如果工程师和程序员是他们自己,这可能就像拔牙一样。并不是说拔牙不好玩,相信我,我做过,但它比看起来要多,有时牙齿仙女并没有给你额外的钱作为你所有的努力。

KV

ACM队列的q戳相关文章
queue.acm.org

规模失败
乔治Neville-Neil
http://queue.acm.org/detail.cfm?id=2147781

编排自动化测试实验室
迈克尔Donat说
http://queue.acm.org/detail.cfm?id=1046946

OSGi如何改变我的生活
Peter Kriens
http://queue.acm.org/detail.cfm?id=1348594

回到顶部

作者

乔治诉Neville-Neilkv@acm.org)是内维尔-尼尔咨询公司(Neville-Neil Consulting)的业主,也是ACM队列编辑委员会。他从事网络和操作系统的代码编写工作,从中获得乐趣和利润,教授各种与编程相关的课程,并鼓励您发表与他有关的评论、妙语和代码片段通信列。


版权归作者所有。

数字图书馆是由计算机协会出版的。版权所有©2013 ACM有限公司


没有发现记录

登录为完全访问
»忘记密码? *创建ACM Web帐户
文章内容:
Baidu
map