有了Erlang的"让它崩溃"的理念,如果一个进程无法分配进行其操作所需的内存,人们就会期望整个VM不会崩溃.实际上,如果系统有一个启发式来杀死一些进程来释放一些内存,那么其他一些进程就会处理这个并恢复.根管理员可能不太可能被启发式杀死.
这与大多数现代流行语言形成鲜明对比,这些语言只会死或让操作系统选择做什么.
如何在Erlang中实际处理内存不足?
我一直在HP Proliant服务器上运行高度并发的应用程序.该应用程序是我在erlang中编码的文件系统索引器.它在文件系统上找到每个文件夹的进程,并在碎片化的Mnesia数据库中记录所有文件路径.(数据库由disc_only_copies
表的类型组成,其文件系统的屏幕截图可在此处查看.)
执行文件系统的高密度工作的代码片段如下所示:
%%% -------- COPYRIGHT NOTICE -------------------------------------------------------------------- %% @author Muzaaya Joshua, <joshmuza@gmail.com> [http://joshanderlang.blogspot.com] %% @version 1.0 free software, but modification prohibited %% @copyright Muzaaya Joshua (file_scavenger-1.0) 2011 - 2012 . All rights reserved %% @reference <a href="http://www.erlang.org">OpenSource Erlang WebSite</a> %% %%% ---------------- EDOC INTRODUCTION TO THE MODULE ---------------------------------------------- %% @doc This module provides the low level APIs for reading, writing, %% searching, joining and moving within directories.The module implementation %% took place on @date at …