分配了大量的文件描述符(Allocating a lot of file descriptors)

2019-10-16 19:26发布

我很感兴趣,将系统崩溃(对,说15分钟)通过分配了大量的文件描述符,造成外的文件描述符失败。 (别担心,我不是要侵入任何东西。这是用于测试服务我写信......看它的行为在行为不端的其他程序。)对于任何的最佳做法? 我应该不断并称for循环无限fopen()函数? 15分钟后,我可以杀死进程? 是否有人有这方面的经验?

更新:我的计算机运行Linux和我写的程序将有超级用户权限。

谢谢〜修行者

Answer 1:

你有没有考虑降低了setrlimit RLIMIT_NOFILE运行程序之前文件描述符限制?

这可以简单地用的bash来完成的ulimit -n内置的,在你测试你的应用程序,例如,相同的外壳:

 ulimit -n 32

而且它不会干扰很多很多其他的服务已经在运行。 降低该限制将让您的应用程序(在同一个shell中运行)伤害它迅速(你的测试目的)。

在整个系统级别之外,还可以写入/proc/sys/fs/file-max例如用

echo 1024 > /proc/sys/fs/file-max


Answer 2:

根据操作系统的实现,但调用fopen从同一个进程相同的文件将不分配新的文件说明,而只是增加引用计数器。

我建议你阅读一些关于压力测试

下面是一些可用软件(你没有任何标记OS平台):

http://www.opensourcetesting.org/performance.php



Answer 3:

我不得不在正常使用中这种情况发生一次。 我相信你在Linux inode的运行。 我不知道,只是打开文件更快的方法。 只是要小心,我们锁定我们的系统了。 这是前一阵子,所以我不记得什么是试图打开一个文件,但事情通常假定他们可以得到一个文件句柄和不循规蹈矩以及他们应该在他们不能如此。 〜奔



Answer 4:

我的2美分:

1.Write创建了大量的文件描述符的程序。 您可以通过以下方法之一实现它:

(一)开很多不同的文件在你的代码
(b)打开很多套接字描述符的

(三)创建很多线程

2.Now,保持产卵在步1中创建的程序的多个实例(即创建多个进程)使用外壳脚本或类似的东西。

注:在Linux和大多数其他操作系统,对每个进程的文件描述符的数量限制(在Linux默认它为1024我想你可以使用的ulimit -a检查它。)。 所以,当你这样做的过程只会失败。 我真的不敢肯定,只是通过增加文件描述符使用的号码,你可以使系统走下来。



Answer 5:

您可以使用mkstemp得到的临时文件的文件描述符。



文章来源: Allocating a lot of file descriptors