我们正在使用运行 Ubuntu 14.04 的 Amazon EC2 实例,但我们遇到了几个问题。
根据我们当前运行的 CPU 配置,我可以打开的文件的最大数量是多少?
有这方面的计算吗?还是算法?
我们的 CPU 配置(双 CPU):
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 62
model name : Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz
stepping : 4
microcode : 0x415
cpu MHz : 2494.046
cache size : 25600 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 1
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx rdtscp lm constant_tsc rep_good nopl xtopology eagerfpu pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm xsaveopt fsgsbase smep erms
bogomips : 4988.09
clflush size : 64
cache_alignment : 64
address sizes : 46 bits physical, 48 bits virtual
power management:
为了清楚起见,我不是问如何设置这些限制,而是问如何计算我们的设置的最大限制。
答案1
我非常确定您将遇到的限制是您将耗尽所涉及的内核数据结构的 RAM。 CPU 架构可能很重要(例如,因为数据结构大小不同,或者必须以不同方式对齐),但您拥有哪个特定的 x86_64 CPU 应该不重要。
32 位平台可能会将您限制为 2 31 -1(即 MAXINT),但您肯定会首先耗尽 RAM — 一个文件描述符占用两个以上字节的 RAM。 (当然,您使用的是 64 位平台,而 2 63 -1 是要打开的文件数量,这是荒谬的)
我承认我不知道如何计算这个数字——这肯定取决于文件描述符的类型;如果是 TCP 套接字、打开本地文件(甚至可能因文件系统而异)、管道等,内核内存使用肯定会有所不同。
老实说,我建议您启动一个临时 EC2 实例(具有相同的机器类型),将限制设置为高得离谱的值,然后进行测试。