我的Java程序失败了
Caused by: java.io.IOException: Too many open files
at java.io.UnixFileSystem.createFileExclusively(Native Method)
at java.io.File.createNewFile(File.java:883)...
Run Code Online (Sandbox Code Playgroud)
以下是关键线/etc/security/limits.conf.他们将用户的最大文件设置为500k:
root soft nofile 500000
root hard nofile 500000
* soft nofile 500000
* hard nofile 500000
Run Code Online (Sandbox Code Playgroud)
我跑去lsof计算打开的文件数 - 全局和jvm进程.我检查了柜台/proc/sys/fs.一切似乎都好.我的进程只打开4301个文件,限制为500k:
:~# lsof | wc -l
5526
:~# lsof -uusername | wc -l
4301
:~# cat /proc/sys/fs/file-max
744363
:~# cat /proc/sys/fs/file-max
744363
:~# cat /proc/sys/fs/file-nr
4736 0 744363
Run Code Online (Sandbox Code Playgroud)
这是一个Ubuntu 11.04服务器.我甚至重新启动所以我很肯定这些参数正在被使用.
我不知道它是否相关,但是这个过程是由一个upstart脚本启动的,它使用setuidgid启动进程,如下所示:
exec setuidgid username java $JAVA_OPTS -jar myprogram.jar
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
我有以下命令.无论.user.log文件存在于何处,我们都需要打印父目录(即hht和wee1.)如何做到这一点?
$ cd /nfs//office/ && find . -name '.user.log'
./hht/info/.user.log
./wee1/info/.user.log
Run Code Online (Sandbox Code Playgroud) 假设我有连续的整数范围[0, 1, 2, 4, 6],其中第一个3是"缺失"数字.我需要一个算法来找到第一个"洞".由于范围非常大(可能包含2^32条目),因此效率很重要.数字范围存储在磁盘上; 空间效率也是一个主要问题.
什么是最好的时间和空间效率算法?
我有一个混合的C/C++程序.它包含一个以C/C为目标的flex/bison解析器,其余为C++.
作为C,生成的解析器和扫描器用malloc,realloc和管理它们的内存free.它们足以暴露钩子,允许我提交我自己的这些函数的实现.正如你所料,(C++)程序的其余部分"要"来使用new,delete等等.
进行一些研究似乎表明,相关标准并不能保证这种混合应该起作用.特别是C"堆"不一定是C++"自由区".看来这两个方案可以相互踩踏.
最重要的是,有一天(很快),该程序可能希望集成一个自定义的堆实现,例如tcmalloc,由C和C++使用.
在这里做什么是"正确"的事情?
鉴于需要集成tcmalloc(它解释了如何与C程序链接),我很想在C++内存管理中找到一些跨类型,跨线程,跨所有重载/钩子/任何东西.有了这个,我可以将所有C++分配/释放调用回到它们的C等价物(反过来又落在tcmalloc上).
是否存在这样的泛星系全局C++钩子?可能它已经在做我想要的,类似于ios_base::sync_with_stdio默认情况下秘密地与iostream和stdio结合?
我对谈论stdio与iostreams以及切换解析器生成器以及使用C++ flex/bison骨架(它们引入独立的头痛)并不感兴趣.
编辑:请包括支持您的答案的C++标准的那些部分的名称.
我想知道是否有任何方法列出源代码中对函数的所有调用,以便我可以看到依赖项,如果我修改该函数.
我使用的一种方法是在"整个解决方案"中搜索函数名称,但我正在寻找更好的方法.
我是这个领域的初学者.
我研究过fork(),vfork(),clone()和并行线程.
我注意到pthread_create()会创建一个线程,这比创建一个新进程的开销要少fork().此外,该线程将与父进程共享文件描述符,内存等.
但是,当是fork()和clone()比并行线程更好?你能通过给出现实世界的例子向我解释一下吗?
提前致谢.
你得到了n数字,你必须找到对的数量,使得它们之间至少有一个数字.
例如.对于5个数字:
2837 2818 654 35 931
Run Code Online (Sandbox Code Playgroud)
答案:6
这里的配对是 (2837,2818), (2837,35), (2837,931), (2818,931), (654,35), (35,931)
我的尝试:我采用的结构存储了十进制数字,数字形式的数字和数字中的数字.
现在,每一个号码,我散列这个数字在阵列conatining指数0-9,并与所有下面的数字选中的阉他们的任何一位的是已经存在.
我的尝试是O(n^2),这很慢.还有其他算法可以更快地运行吗?
我想优化这个简单的循环:
unsigned int i;
while(j-- != 0){ //j is an unsigned int with a start value of about N = 36.000.000
float sub = 0;
i=1;
unsigned int c = j+s[1];
while(c < N) {
sub += d[i][j]*x[c];//d[][] and x[] are arrays of float
i++;
c = j+s[i];// s[] is an array of unsigned int with 6 entries.
}
x[j] -= sub; // only one memory-write per j
}
Run Code Online (Sandbox Code Playgroud)
使用4000 MHz AMD Bulldozer,该循环的执行时间约为1秒.我想过SIMD和OpenMP(我通常用它来获得更快的速度),但这个循环是递归的.
有什么建议?