一种可能性是,你已经达到了你的用户限制打开文件的数量。
我相信每个进程/线程都会消耗一个或多个文件描述符。例如,当你的用户发生这种情况时,“no”shell命令将起作用,因为shell命令分离出要执行的进程(你会看到像“-bash:fork:retry:Resource暂时不可用”的错误)
我遇到了这个问题,发现只有当前用户无法产生特效...其他用户不受影响。
解决,你的ulimit-n(最大文件打开)设置...详细信息如下。
你可以在命令行看看你的用户限制:
ulimit -a
最多你用下面的最大文件限制:
ulimit -n 65536
这里是我现在所拥有的:
$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 256797
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 75000
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 100000
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
要查看所有为您的系统明确的限制:
cat /etc/security/limits.conf
请注意:我使用的是Oracle的Linux 6.3 - 结果可能发行版之间略有不同。
也有可能是只创建了太多的线程应用程序的问题 - 如文中提到,更多的线程==可与调整来解决更多的本地存储空间的使用。这个假设需要的线程数合法应用程序。但如果应用程序产生线程并从不杀死它们(线程泄漏),那么没有任何调整将会修复它。也可能是操作系统对每个进程的线程数有限制。 – 2011-03-09 23:18:33
是否有任何简单的方法从java代码本身获得与我的进程相关的线程数?由于这是一家虚拟主机公司的JVM,我几乎不能访问JVM级别的工具。尽管我可以测试我的代码(这是我为获取JVM内存信息所做的)。 – tvfoodmaps 2011-03-09 23:33:48
有没有办法AFAIK,但托管公司有支持团队谁可以转储线程给你,如果你教他们如何。 – 2011-03-10 02:35:11