1

我正在我的机器上开发一个 java 程序。当我想测试时,我首先在我的机器上尝试小测试用例,然后我想用真实数据运行这个程序。一个小测试是查看 linux 内核中的一个文件,而“真正的”测试是查看整个内核......

但我想同时运行多个“真实”测试(在不同版本的内核上),所以我有 5 台相同的测试机器(运行 linux fedora)。如何在数据和程序方面同步这 5 台机器(我有时使用 yum 安装程序)?

我怎样才能确定我在任何时候都拥有完全相同的环境?

现在我主要使用scp,我的代码在svn上......

4

2 回答 2

2

我建议使用像 VMware 这样的虚拟化技术将一个实例克隆为多个。这样做的好处是始终能够在测试后回到相同的起点,并且能够运行比物理盒子更多的场景。

于 2009-05-08T15:08:04.387 回答
0

您可以让您的基准测试工具通过http或其他一些流行的协议获取新版本的程序和测试数据。如果您不想使用 http,您可以考虑使用网络文件系统(例如NFSGlusterFS)。

在我看来,您将在单个“主”服务器上启动您的脚本,然后它会产生 5 个 bash 进程。他们每个人都将登录到远程“从”服务器并执行基准测试工具。基准测试工具将从某个(可能是“主”)服务器获取新程序和数据,然后执行它,测量时间/内存/等并在标准输出上返回这些值,因此 ssh 会将其传递回主服务器服务器,它是 bash 进程。然后,您将 bash 会话输出重定向到文件。

testmaster.sh -> 5*(testnode.sh -> ssh
-> fetch_and_benchmark -> output -> (ssh) -> testnode.sh -> file)

testmaster.sh 必须每秒检查所有文件是否已经存在,然后读取并比较结果。这听起来可能很糟糕,但相信我,如果你不手动完成所有这些事情会更好,而且脚本相对容易编写。

关于确保您在所有盒子上拥有相同的环境......不要让任何人靠近您的测试节点并且不要对它们做任何事情。

我不建议虚拟化,因为它会以您无法预测的方式改变您的测试结果。虚拟机不能像纯机一样快,也不仅仅是“它慢了 20%”。有些事情要慢得多,有些则慢得多。如果您不介意,请使用虚拟化和快照,但您说您在多个节点上测试事物,每个节点都有不同的内核,所以我想您会非常认真地对待它。

啊,还有一件事。Linux 有一种有趣的释放内存的方式(就像“在有人需要它之前不要释放它”)。有些东西会被缓存。可以肯定的是,您必须在每次测试会话后重新启动测试机器。

于 2009-05-08T20:40:28.677 回答