`
langzhe
  • 浏览: 286172 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Erlang内存分布

 
阅读更多
The amount returned by erlang:memory/0-1 is the amount of memory actively allocated, where Erlang terms are laid in memory; this amount does not represent the amount of memory that the OS has given to the virtual machine (and Linux doesn't actually reserve memory pages until they are used by the VM). To understand where memory goes, one must first understand the many allocators being used:

 

 


  1. temp_alloc: does temporary allocations for short use cases (such as data living within a single C function call).
  2. eheap_alloc: heap data, used for things such as the Erlang processes' heaps.
  3. binary_alloc: the allocator used for reference counted binaries (what their 'global heap' is).
  4. ets_alloc: ETS tables store their data in an isolated part of memory that isn't garbage collected, but allocated and deallocated as long as terms are being stored in tables.
  5. driver_alloc: used to store driver data in particular, which doesn't keep drivers that generate Erlang terms from using other allocators. The driver data allocated here contains locks/mutexes, options, Erlang ports, etc.
  6. sl_alloc: short-lived memory blocks will be stored there, and include items such as some of the VM's scheduling information or small buffers used for some data types' handling.
  7. ll_alloc: long-lived allocations will be in there. Examples include Erlang code itself and the atom table, which stay there.
  8. fix_alloc: allocator used for frequently used fixed-size blocks of memory. One example of data used there is the internal processes' C struct, used internally by the VM.
  9. std_alloc: catch-all allocator for whatever didn't fit the previous categories. The process registry for named process is there.

The entire list of where given data types live can be found in the source.

By default, there will be one instance of each allocator per scheduler (and you should have one scheduler per core), plus one instance to be used by linked-in drivers using async threads. This ends up giving you a structure a bit like the drawing above, but split it in N parts at each leaf.

0
1
分享到:
评论

相关推荐

    Erlang内存管理.pdf

    在Erlang内存管理的背景下,有几个重要的概念需要理解: 1. 堆和栈: Erlang中的每个进程都有自己的内存堆和栈。堆用于存储动态分配的对象,比如元组、列表、字典等;而栈用于存储过程调用和本地变量。 2. ...

    Erlang项目内存泄漏分析方法

    首先,要理解Erlang内存泄漏的基本概念。Erlang的内存泄漏通常是指内存使用随时间不断增加,但相应的垃圾回收(GC)却没有释放这部分内存。Erlang虚拟机(BEAM)在运行时会监控内存的使用情况。如果发现内存使用不断...

    erlang编程 Introducing Erlang

    它负责解释Erlang字节码,提供内存管理、垃圾回收和并发调度等功能。 ### 10. 语言特性 Erlang的语法简洁,支持模式匹配、函数式编程、列表处理和递归等特性。它的动态类型系统和强大的类型推断让代码更加灵活。 ...

    Erlang深度分析

    这包括了解ETS(Erlang Term Storage)和Dets(Disk ETS)的使用,以及如何监控和调整内存分配。 ##### 3.2 Erlang中的调试工具 调试是软件开发中不可或缺的环节,Erlang提供了许多强大的调试工具,例如Erlang的...

    erlang 深度分析

    查看Erlang内存使用情况 - **工具**: `observer`和`sys`提供了丰富的内存监控功能。 - **指标**: - **总内存**: 系统当前使用的总内存。 - **堆内存**: 进程堆内存使用量。 - **分配内存**: 当前已分配的内存...

    windows下安装Erlang环境

    总之,Erlang以其独特的并发模型、分布特性和容错能力,成为构建高可用性和高并发系统的理想选择。对于那些需要处理大量并发连接和需要高度可靠性的服务,如电信、云基础设施或实时系统,Erlang提供了强大而优雅的...

    inside Erlang VM3

    - **内存管理**:ERTS使用独立的内存池来提高内存分配效率,并允许用户进行细粒度调整。 - **锁机制**:ERTS具备高效的锁和同步机制,保证了多进程之间的安全交互。 #### Erlang集群设施 - **Net_kernel和EPMD**:...

    erlang nif test

    - **内存管理**:Erlang VM负责内存的分配和回收,但NIF代码需要遵循特定的规则来操作Erlang术语,如使用`enif_alloc`分配内存,然后用`enif_free`释放。 - **错误传播**:Erlang的错误处理机制与C不同,所以要确保...

    Erlang 环境 opt_win64_21.1版本

    - 自动内存管理:Erlang使用垃圾回收机制,开发者无需手动管理内存。 - 函数式编程:Erlang强调纯函数,无副作用,代码更易于理解和测试。 RabbitMQ的核心功能包括: - 消息路由:RabbitMQ可以将消息路由到不同的...

    Erlang程序设计(第2版)1

    Erlang允许开发者构建可以跨越多个节点运行的应用,这些节点可以分布在不同的物理机器上。书中详细介绍了如何设计和实现这样的分布式系统,包括如何确保节点间的通信安全和高效。此外,还讲解了分布式系统中常见的...

    Erlang.ppt

    由于Erlang进程具有独立的内存空间,一个进程的崩溃不会影响其他进程,这大大增强了系统的整体稳定性。Erlang的错误处理机制允许系统在出现问题时进行优雅降级,而不是完全崩溃。 最后,Erlang的开放源码特性促进了...

    otp-win64-25.0.1.exe ErLang 下载

    5. **垃圾回收机制**:ErLang的垃圾回收机制有效地管理内存,避免了常见的内存泄露问题。 6. **简洁的语法**:ErLang的函数式编程风格使得代码简洁明了,易于理解和调试。 **在Windows上安装和使用ErLang** 下载...

    Erlang的高级特性和应用

    **Erlang 高级特性和...总的来说,Erlang凭借其高级特性,如并发处理、分布计算和高可靠性,在构建大规模、高可用性的系统中展现出了强大的优势。这使得Erlang成为开发云服务、实时通信和分布式应用程序的理想选择。

    erlang19.3

    4. **内存管理**:Erlang 的垃圾收集机制在 19.3 版本中可能进行了调整,以实现更有效的内存分配和回收,减少内存碎片,提高整体系统性能。 5. **库和模块更新**:OTP 中的库和模块会随着版本迭代而不断升级和完善...

    Erlang_to_C

    - **运行时优化**:通过高效的数据结构管理、内存分配策略以及垃圾回收机制等方法来提高程序的整体性能。 - **平台适应性**:Turbo Erlang的设计考虑到了跨平台的需求,能够在不同的操作系统和硬件架构上运行。 #...

    改进erlang版的protobuf代码

    2. **内存管理优化**:可能通过减少内存分配和拷贝,或者采用更有效的内存池策略,提升了代码在处理大量数据时的性能。 3. **并发处理增强**:Erlang天生适合并发,改进可能包含对多线程或进程通信的优化,使得...

    某流水过千W的erlang游戏后端

    9. **服务器优化**:通过合理的进程调度、内存管理和并发控制,Erlang可以有效利用硬件资源,确保在高负载下游戏后端依然流畅运行。 10. **代码复用与模块化**:Erlang的模块化设计鼓励代码重用,使得游戏后端的...

Global site tag (gtag.js) - Google Analytics