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

system_info模块

阅读更多
在看了Erlang新增全面的系统信息收集器-system_information模块之后,自己下载最新的代码,查看该模块,仔细看了一下
report() -> [
	{init_arguments,    init:get_arguments()},
	{code_paths,        code:get_path()},
	{code,              code()},
	{system_info,       erlang_system_info()},
	{erts_compile_info, erlang:system_info(compile_info)},
	{beam_dynamic_libraries, get_dynamic_libraries()},
	{environment_erts,  os_getenv_erts_specific()},
	{environment,       [split_env(Env) || Env <- os:getenv()]}
    ].

[list]
  • {init_arguments,    init:get_arguments()},对应的是vm的启动参数,详细信息参考文档中的erts中的init模块。
  • {code_paths,        code:get_path()},对应的是加载到vm中模块的路径
  • {code,              code()},对应的是加载路径内相应代码的详细信息:
  • 当路径是一个application的路径时,对应的信息是:
    {application,
        {AppName, [
    		    {description, proplists:get_value(description, Info, [])},
    		    {vsn,         proplists:get_value(vsn, Info, [])},
    		    {path,        Path},
    		    {modules,     [
                                       {Mod, [
                                               {loaded,   Loaded},
                                               {native,   beam_is_native_compiled(Beam)},
                                               {compiler, get_compiler_version(Beam)},
                                               {md5,      hexstring(Md5)}
                                              ]}]}]}}
  • {system_info,       erlang_system_info()},对应的是调用erlang:system_info(Ele)获得信息列表,其中Ele组成的列表是:
  • [
    	    allocator,
    	    check_io,
    	    otp_release,
    	    port_limit,
    	    process_limit,
    	    % procs,  % not needed
    	    smp_support,
    	    system_version,
    	    system_architecture,
    	    threads,
    	    thread_pool_size,
    	    {wordsize,internal},
    	    {wordsize,external},
    	    {cpu_topology, defined},
    	    {cpu_topology, detected},
    	    scheduler_bind_type,
    	    scheduler_bindings,
    	    compat_rel,
    	    schedulers_state,
    	    build_type,
    	    logical_processors,
    	    logical_processors_online,
    	    logical_processors_available,
    	    driver_version,
    	    emu_args,
    	    ethread_info,
    	    beam_jump_table,
    	    taints
    	]
    
  • {erts_compile_info, erlang:system_info(compile_info)},对应的信息参考erlang模块
  • {beam_dynamic_libraries, get_dynamic_libraries()},对应的是:vm依赖的动态库情况
  • {environment_erts,  os_getenv_erts_specific()},对应的是:erts运行的环境变量
  • {environment,       [split_env(Env) || Env <- os:getenv()]},对应的是所有的系统环境变量
  • [/list]
    分享到:
    评论
    3 楼 liumengfan 2013-07-31  
    {beam_dynamic_libraries, get_dynamic_libraries()},实际上执行的是系统命令
    get_dynamic_libraries() ->
        Beam = filename:join([os:getenv("BINDIR"),get_beam_name()]),
        case os:type() of
    	{unix, darwin} -> os:cmd("otool -L " ++ Beam);
    	_ -> os:cmd("ldd " ++ Beam)
        end.
    

    当是unix时执行otool -L beam.smp[beam,beam.debug.smp,beam.debug]
    其他时执行ldd beam.smp[beam,beam.debug.smp,beam.debug]
    $ ldd /usr/local/lib/erlang/erts-5.10.2/bin/beam.smp
    	linux-vdso.so.1 =>  (0x00007fff52c2b000)
    	libutil.so.1 => /lib64/libutil.so.1 (0x000000392c400000)
    	libdl.so.2 => /lib64/libdl.so.2 (0x000000391e400000)
    	libm.so.6 => /lib64/libm.so.6 (0x000000391ec00000)
    	libncurses.so.5 => /lib64/libncurses.so.5 (0x000000392d000000)
    	libpthread.so.0 => /lib64/libpthread.so.0 (0x000000391f000000)
    	librt.so.1 => /lib64/librt.so.1 (0x000000391f800000)
    	libc.so.6 => /lib64/libc.so.6 (0x000000391e800000)
    	libtinfo.so.5 => /lib64/libtinfo.so.5 (0x0000003931000000)
    	/lib64/ld-linux-x86-64.so.2 (0x000000391e000000)
    

    获取Beam的代码如下:
    get_beam_name() ->
        Type = case erlang:system_info(build_type) of
    	opt -> "";
    	TypeName -> "." ++ atom_to_list(TypeName)
        end,
        Flavor = case erlang:system_info(smp_support) of
    	false -> "";
    	true -> ".smp"
        end,
        Beam = case os:getenv("EMU") of
    	false -> "beam";
    	Value -> Value
        end,
        Beam ++ Type ++ Flavor.
    

    其中erlang:system_info(build_type)返回的结果可能是以下可能,具体参见文档
                          opt |
                          debug |
                          purify |
                          quantify |
                          purecov |
                          gcov |
                          valgrind |
                          gprof |
                          lcnt |
                          frmptr
    
    2 楼 liumengfan 2013-07-31  
    {environment,       [split_env(Env) || Env <- os:getenv()]},对应的细节是:
    split_env(Env) ->
        split_env(Env, []).
    
    split_env([$=|Vs], Key) -> {lists:reverse(Key), Vs};
    split_env([I|Vs], Key)  -> split_env(Vs, [I|Key]);
    split_env([], KV)       -> lists:reverse(KV). % should not happen.
    

    os:getenv()获得的结果是:
    ["module=() {  eval `/usr/bin/modulecmd bash $*`\n}",
     "XAUTHORITY=/var/run/gdm/auth-for-liufan-RKsU4w/database",
     "COLORTERM=gnome-terminal","G_BROKEN_FILENAMES=1",
     "DISPLAY=:0.0","WINDOWPATH=1",
     "LESSOPEN=|/usr/bin/lesspipe.sh %s",
     "MODULESHOME=/usr/share/Modules",
     "DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-AjSkT7YKdz,guid=755d7685de583da75ff5da770000002a",
     "QTLIB=/usr/lib64/qt-3.3/lib","CVS_RSH=ssh",
     "LOGNAME=liufan",
     "GNOME_DESKTOP_SESSION_ID=this-is-deprecated",
     "HOME=/home/liufan","SHLVL=2",
     "SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass",
     "HISTCONTROL=ignoredups","GDMSESSION=gnome",
     "LOADEDMODULES=","KDEDIRS=/usr",
     "MODULEPATH=/usr/share/Modules/modulefiles:/etc/modulefiles",
     "GDM_LANG=zh_CN.utf8","PROGNAME=erl","LANG=zh_CN.utf8",
     "KDE_IS_PRELINKED=1","GNOME_KEYRING_PID=2988",
     "GDM_KEYBOARD_LAYOUT=us","XMODIFIERS=@im=ibus",
     [...]|...]
    

    而转换后的结果是
    {environment,[{"module",
                   "() {  eval `/usr/bin/modulecmd bash $*`\n}"},
                  {"XAUTHORITY",
                   "/var/run/gdm/auth-for-liufan-RKsU4w/database"},
                  {"COLORTERM","gnome-terminal"},
                  {"G_BROKEN_FILENAMES","1"},
                  {"DISPLAY",":0.0"},
                  {"WINDOWPATH","1"},
                  {"LESSOPEN","|/usr/bin/lesspipe.sh %s"},
                  {"MODULESHOME","/usr/share/Modules"},
                  {"DBUS_SESSION_BUS_ADDRESS",
                   "unix:abstract=/tmp/dbus-AjSkT7YKdz,guid=755d7685de583da75ff5da770000002a"},
                  {"QTLIB","/usr/lib64/qt-3.3/lib"},
                  {"CVS_RSH","ssh"},
                  {"LOGNAME","liufan"},
                  {"GNOME_DESKTOP_SESSION_ID","this-is-deprecated"},
                  {"HOME","/home/liufan"},
                  {"SHLVL","2"},
                  {"SSH_ASKPASS","/usr/libexec/openssh/gnome-ssh-askpass"},
                  {"HISTCONTROL","ignoredups"},
                  {"GDMSESSION","gnome"},
                  {"LOADEDMODULES",[]},
                  {"KDEDIRS","/usr"},
                  {"MODULEPATH",
                   "/usr/share/Modules/modulefiles:/etc/modulefiles"},
                  {"GDM_LANG","zh_CN.utf8"},
                  {"PROGNAME","erl"},
                  {"LANG","zh_CN.utf8"},
                  {"KDE_IS_PRELINKED",[...]},
                  {[...],...},
                  {...}|...]}
    
    1 楼 liumengfan 2013-07-31  
    其中{environment_erts,  os_getenv_erts_specific()},对应的是:erts运行的环境变量涉及到的变量如下:
    [
    	    "BINDIR",
    	    "DIALYZER_EMULATOR",
    	    "CERL_DETACHED_PROG",
    	    "EMU",
    	    "ERL_CONSOLE_MODE",
    	    "ERL_CRASH_DUMP",
    	    "ERL_CRASH_DUMP_NICE",
    	    "ERL_CRASH_DUMP_SECONDS",
    	    "ERL_EPMD_PORT",
    	    "ERL_EMULATOR_DLL",
    	    "ERL_FULLSWEEP_AFTER",
    	    "ERL_LIBS",
    	    "ERL_MALLOC_LIB",
    	    "ERL_MAX_PORTS",
    	    "ERL_MAX_ETS_TABLES",
    	    "ERL_NO_VFORK",
    	    "ERL_NO_KERNEL_POLL",
    	    "ERL_THREAD_POOL_SIZE",
    	    "ERLC_EMULATOR",
    	    "ESCRIPT_EMULATOR",
    	    "HOME",
    	    "HOMEDRIVE",
    	    "HOMEPATH",
    	    "LANG",
    	    "LC_ALL",
    	    "LC_CTYPE",
    	    "PATH",
    	    "PROGNAME",
    	    "RELDIR",
    	    "ROOTDIR",
    	    "TERM",
    	    %"VALGRIND_LOG_XML",
    
    	    %% heart
    	    "COMSPEC",
    	    "HEART_COMMAND",
    
    	    %% run_erl
    	    "RUN_ERL_LOG_ALIVE_MINUTES",
    	    "RUN_ERL_LOG_ACTIVITY_MINUTES",
    	    "RUN_ERL_LOG_ALIVE_FORMAT",
    	    "RUN_ERL_LOG_ALIVE_IN_UTC",
    	    "RUN_ERL_LOG_GENERATIONS",
    	    "RUN_ERL_LOG_MAXSIZE",
    	    "RUN_ERL_DISABLE_FLOWCNTRL",
    
    	    %% driver getenv
    	    "CALLER_DRV_USE_OUTPUTV",
    	    "ERL_INET_GETHOST_DEBUG",
    	    "ERL_EFILE_THREAD_SHORT_CIRCUIT",
    	    "ERL_WINDOW_TITLE",
    	    "ERL_ABORT_ON_FAILURE",
    	    "TTYSL_DEBUG_LOG"
    	]
    

    相关推荐

      student_info_system.rar_student_info_system

      本项目“student_info_system”就是一个用VBA(Visual Basic for Applications)编写的实例,适用于毕业设计或教学实践,下面将详细介绍其核心知识点。 一、VBA基础 VBA是Microsoft Office套件内嵌的一种编程语言,...

      Python库 | system_calls-5.15.0-py3-none-any.whl

      system_calls库的具体功能和API会因库的实现而异,通常会包含一系列方法,如`system_call()`用于执行系统命令并返回结果,`get_system_info()`用于获取系统信息,以及可能存在的其他系统级别的操作。 需要注意的是...

      student_info_management_system_vb.rar_vb.net_vb.net 学生 信息管理 系统_v

      【标题】"student_info_management_system_vb.rar" 是一个基于 VB.NET 开发的学生信息管理系统的压缩包文件。VB.NET 是 Microsoft .NET Framework 的一部分,它提供了一种面向对象的编程语言,用于创建桌面应用程序...

      LTE_System_Level

      4. **LTE_GUI_pathloss_antenna_info.fig和LTE_GUI_pathloss_antenna_info.m**:这些文件可能与路径损耗和天线信息有关,用户可以通过GUI观察不同场景下的信号传播损失,以及天线配置对通信质量的影响。 5. **LTE_...

      WEB_NCE_SYSTEM_VISCOLOR_1.1.pdf

      ### WEB NCE SYSTEM VISCOLOR 1.1 知识点概述 #### 一、系统简介 VISCOLOR 是一款专为印刷业设计的黏度测量与调节系统。该系统具备高度灵活性,能够应用于多种印刷过程中液体黏度的测量,如出版凹版印刷机上的应用...

      rplidar_ros雷达模块

      rplidar_ros是一个针对RoboPeak公司的RPLIDAR系列激光雷达(LIDAR)设备的ROS(Robot Operating System)驱动模块。它提供了与RPLIDAR交互的接口,使得用户能够在ROS环境中轻松地获取、处理和利用RPLIDAR的数据。...

      os_info.rar_V2

      `os_info.h`很可能是`os_info.c`的接口定义,定义了对外公开的函数和数据结构,供其他模块调用以获取内存信息。 通过这个接口,开发者可以轻松地集成到他们的应用程序中,获取到Linux系统当前的内存状态,比如总...

      ESP8266 SDK0.95最新中文版

      - **system_get_rst_info**:获取复位信息。此函数返回ESP8266最后一次复位的原因。 - **system_soft_wdt_stop**:停止软件看门狗。此函数停止ESP8266的软件看门狗功能。 - **system_soft_wdt_restart**:重启软件...

      ESP8266 WiFi IDE学习文档

      ##### system_get_rst_info **功能**: 获取重置信息。 **返回值**: 重置信息。 ##### system_soft_wdt_stop **功能**: 停止软看门狗。 ##### system_soft_wdt_restart **功能**: 重启软看门狗。 ##### os_memset ...

      QQ_Login_Info

      在登录系统设计中,通常会涉及以下几个关键模块: 1. 用户界面(UI):这是用户与程序交互的部分。在C#中,我们可以使用Windows Forms或WPF来创建图形用户界面,包括文本框(TextBox)用于输入用户名和密码,按钮...

      ESP8266 重启原因以及常见Fatal Exception原因-v1.0.pdf

      struct rst_info *rtc_info = system_get_rst_info(); ``` 2. **重启原因解释**:`rtc_info-&gt;reason`字段包含了重启的原因码,这些原因码可以帮助开发者快速定位问题所在。例如,如果`rtc_info-&gt;reason`的值为`...

      获取本地计算机信息所有文件压缩

      这段代码会生成一个名为`system_info.json`的文件,其中包含从`sigar`获取的计算机信息,然后将其与压缩文件`local_computer_info.zip`一起保存。这样,我们就完成了本地计算机信息的获取、整理和压缩打包过程。 总...

      order_info_system:mongo mongoose grunt nodejs angularjs coffeescript 的技术栈的一个简单工程

      订单信息管理系统(order_info_system)是一个基于多种技术栈构建的项目,其中包括MongoDB、Mongoose、Grunt、Node.js、AngularJS、CoffeeScript以及Bootstrap。这个系统旨在提供一个用于管理订单信息的平台,集成了...

      The Java Module System 源码

      Java模块系统(Java Module System,简称JMS),是Java 9及更高版本引入的一个核心特性,旨在解决大型项目中的依赖管理和提升程序的可维护性、安全性和性能。它通过引入模块化概念,使得代码组织更加有序,同时也为...

      提取电脑CPUID硬盘码MAC地址和系统信息

      def get_system_info(): os_name = platform.system() os_version = platform.release() mem_info = psutil.virtual_memory() disk_info = psutil.disk_usage('/') system_info = { 'os_name': os_name, '...

      内部邮件数据库表设计文档

      本文档主要介绍了内部邮件模块的数据库表设计,包括 send_mail、receive_mail 和 mail_attachments 三个表格的设计。下面将逐一介绍每个表格的设计细节。 send_mail 表格 send_mail 表格用于存储发邮件的信息,...

      Java9模块化开发核心原则与实践

      一、模块化系统:Java Platform Module System (JPMS) Java9的模块化系统,也称为JPMS,旨在解决Java应用程序的复杂性和依赖性管理问题。它通过定义清晰的模块边界,使得代码组织更加有序,提高了可读性和可维护性。...

      STM32单片机读写 ATGM336H(GPS)模块+液晶显示DEMO软件例程源码.zip

      STM32单片机读写 ATGM336H(GPS)模块+液晶显示DEMO软件例程源码,可做为你的学习设计参考。 int main(void) { uint32_t lcdid; char cStr[100]; double deg_lat;//转换成[degree].[degree]格式的纬度 double deg_...

      android系统-背光模块.pdf

      新开发的背光模块应放置在`vendor/ardent/merlin/lights`目录下,编译后生成的`lights.default.so`库会放到`/system/lib/hw`目录中。此外,还需要修改`AndroidBoard.mk`文件,引入自定义的`Mdroid.mk`文件,以指示...

    Global site tag (gtag.js) - Google Analytics