Piy*_*sal 5 linux 64-bit process
我编写了一个程序,可以处理大量数据.我的CPU和操作系统(Ubuntu)都是64位,我有4GB的RAM.使用"top"(%Mem字段),我看到进程的内存消耗上升到大约87%,即3.4+ GB然后它被杀死了.
然后,我使用"uname -m"检查进程可以访问多少内存,这是"无限制".
现在,由于操作系统和CPU都是64位并且还存在交换分区,操作系统应该使用虚拟内存,即总共[> 3.4GB + yGB来自交换空间],并且只有当进程需要更多内存时才会使用它应该被杀了.
所以,我有以下问题:
请建议.
检查file并ldd确认您的可执行文件确实是 64 位。
另请检查资源限制。在进程内部,您可以使用getrlimit系统调用(并setrlimit在可能的情况下更改它们)。从bashshell 中尝试ulimit -a. 从zshshell 尝试一下limit。
还要检查您的进程是否确实消耗了您认为它确实消耗的内存。如果它的pid是1234你可以尝试一下pmap 1234。从进程内部,您可以读取/proc/self/maps或/proc/1234/maps(您可以从终端读取)。您的...中还有/proc/self/smaps或/proc/1234/smaps和/proc/self/status 或/proc/1234/status以及其他文件/proc/self/
检查 \xc2\xa0free是否获得了您认为的内存(和交换空间)。您可以添加一些临时交换空间swapon /tmp/someswapfile(并用于mkswap初始化它)。
几个月(和几年)前,我通常能够cc1在 Gnu/Linux/Debian/Sid/AMD64 下、在具有 8Gb RAM 的机器上运行 7Gb 进程(一个巨大的编译)。
您可以尝试使用一个小型测试程序,该程序分配malloc多个内存块,例如每个 32Mb。不要忘记在里面写入一些字节(至少在每兆字节)。
标准 C++ 容器(如std::map或std::vector据传)消耗的内存比我们通常想象的要多。
如果需要,购买更多内存。这几天相当便宜。
\n