Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 让操作系统为Erlang提供更多内存访问_Linux_Unix_Memory_Erlang_Mnesia - Fatal编程技术网

Linux 让操作系统为Erlang提供更多内存访问

Linux 让操作系统为Erlang提供更多内存访问,linux,unix,memory,erlang,mnesia,Linux,Unix,Memory,Erlang,Mnesia,我一直在功能强大的服务器上运行erlang应用程序。但是,有时,您无法避免此类内存错误,尤其是当用户众多时 Crash dump was written to: erl_crash.dump eheap_alloc: Cannot allocate 467078560 bytes of memory (of type "heap"). 崩溃转储已写入:erl_Crash.dump eheap_alloc:无法分配467078560字节的内存(类型为“heap”)。 更让人恼火的是,您的服务器有2

我一直在功能强大的服务器上运行erlang应用程序。但是,有时,您无法避免此类内存错误,尤其是当用户众多时 Crash dump was written to: erl_crash.dump eheap_alloc: Cannot allocate 467078560 bytes of memory (of type "heap"). 崩溃转储已写入:erl_Crash.dump eheap_alloc:无法分配467078560字节的内存(类型为“heap”)。 更让人恼火的是,您的服务器有20GB的RAM,比如说8个内核。查看erlang所说的内存,它无法分配,这就是它崩溃的原因,这也是令人不安的,因为与服务器的库存相比,它的内存非常少。


我今天的问题(我希望它没有结束)是,可以做什么操作系统配置(考虑RedHat、Solaris、Ubuntu或Linux),使它在需要时为erlang VM提供更多内存

如果要在这些功能强大的服务器上运行erlang应用程序,那么对于底层操作系统(erlang之外)应该考虑哪些内存问题

问题背景
Erlang会消耗主内存,尤其是当进程数量达到数千个时。我正在使用Yaws-Web服务器运行一个Web服务。在同一个节点上,我使用大约3个
ram\u拷贝运行Mnesia。它是一个通知系统,作为运行在intranet上的大型Web应用程序的一部分。用户通过JSONP从运行在不同web服务器和不同硬件上的主应用程序访问这个系统。每个用户连接都直接向mnesia查询所需的任何数据。然而,随着用户数量的增加,我总是得到
崩溃转储。我已经尽可能地调整了应用程序本身,将代码清理到标准,使用了比字符串更多的二进制文件e.t.c。避免了yaws进程和mnesia之间的gen_服务器这样的单一点,因此每个连接都直接命中mnesia。这台服务器的内存和磁盘空间非常大。但是,当我的节点需要多一点内存时,它就会崩溃,这就是为什么我需要找到一种方法来强制操作系统将更多内存扩展到erlang。操作系统是REDHAT ENTERPRISE 6

这可能是因为您运行的是32位模式,其中只有大约4 GB的RAM可寻址。请尝试切换到64位版本的erlang,然后重试。

这可能是因为您运行的是32位模式,其中只有大约4 GB的RAM可寻址。尝试切换到64位版本的erlang,然后再试一次。

我读过的几个不同的服务器教程都说,如果服务以非root用户的身份运行,您可能需要编辑/etc/security/limits.conf,以允许该用户访问比通常允许的更多的内存。下面的示例允许用户fooservice使用2GB

fooservice      hard    memlock   2097152

我读过的几个不同的服务器教程都说,如果服务以非root用户的身份运行,您可能需要编辑/etc/security/limits.conf,以允许该用户访问比通常允许的更多的内存。下面的示例允许用户fooservice使用2GB

fooservice      hard    memlock   2097152

Erlang VM崩溃时使用了多少内存?有多少可用RAM和交换空间?交换空间为8GB,可用内存约为17GB。对于Erlang,操作系统和其他一些例程使用2.5 GB来组成20 GB的Erlang虚拟机,您正在运行什么?32位、64位或半字?在64位操作系统上使用32位您有使用32位Erlang的具体原因吗?您可以在大多数(所有?)支持的64位平台上将Erlang构建为64位进程(或通过包管理器部署相同的进程)。Erlang VM崩溃时使用了多少内存?有多少可用RAM和交换空间?交换空间为8GB,可用内存约为17GB。对于Erlang,操作系统和其他一些例程使用2.5 GB来组成20 GB的Erlang虚拟机,您正在运行什么?32位、64位或半字?在64位操作系统上使用32位您有使用32位Erlang的具体原因吗?您可以在大多数(所有?)支持的64位平台上将Erlang构建为64位进程(或通过包管理器部署相同的进程),甚至可能更少。高位通常是为操作系统保留的(尽管我不知道64位Linux上的32位进程是否如此),甚至可能更少。高位通常保留给操作系统(尽管我不知道64位Linux上的32位进程是否如此)。