Просмотр исходного кода

Merge pull request #6290 from emqx/sys-mon-more-info-43

feat(sys_mon): Add proc_lib:initial_call/1 and current_stacktrace (4.3)

(Same as #6289 )

This adds the information from `proc_lib:initial_call/1` and the
current stacktrace from the process info to `emqx_sys_mon:procinfo/1`
to aid in debugging some warnings with no context such as the
following:

```
2021-11-23T12:33:59.387818+00:00 [warning] info: [{old_heap_block_size,45988046},{heap_block_size,22177879},{mbuf_size,0},{stack_size,40},{old_heap_size,22354134},{heap_size,7106339}], line: 130, mfa: emqx_sys_mon:handle_info/2, msg: large_heap, procinfo: [{pid,<0.2667.0>},{memory,579763664},{total_heap_size,68510672},{heap_size,22177879},{stack_size,40},{min_heap_size,233},{initial_call,{proc_lib,init_p,5}},{current_function,{gen,do_call,4}},{registered_name,[]},{status,running},{message_queue_len,360945},{group_leader,<0.1660.0>},{priority,normal},{trap_exit,false},{reductions,16493271},{last_calls,false},{catchlevel,4},{trace,0},{suspending,[]},{sequential_trace_token,[]},{error_handler,error_handler}]
```
Thales Macedo Garitezi 4 лет назад
Родитель
Сommit
2e93ec0f3d

+ 15 - 25
apps/emqx_auth_http/src/emqx_auth_http.appup.src

@@ -1,26 +1,16 @@
-%% -*-: erlang -*-
-
+%% -*- mode: erlang -*-
 {VSN,
-  [
-    {"4.3.2", [
-     {apply, {application, stop, [emqx_auth_http]}},
-     {load_module, emqx_auth_http_app, brutal_purge, soft_purge,[]},
-     {load_module, emqx_auth_http_cli, brutal_purge, soft_purge,[]}
-    ]},
-    {<<"4.3.[0-1]">>, [
-     {restart_application, emqx_auth_http}
-    ]},
-    {<<".*">>, []}
-  ],
-  [
-    {"4.3.2", [
-     {apply, {application, stop, [emqx_auth_http]}},
-     {load_module, emqx_auth_http_app, brutal_purge, soft_purge,[]},
-     {load_module, emqx_auth_http_cli, brutal_purge, soft_purge,[]}
-    ]},
-    {<<"4.3.[0-1]">>, [
-     {restart_application, emqx_auth_http}
-    ]},
-    {<<".*">>, []}
-  ]
-}.
+  [{"4.3.2",
+    [{apply,{application,stop,[emqx_auth_http]}},
+     {load_module,emqx_auth_http_app,brutal_purge,soft_purge,[]},
+     {load_module,emqx_auth_http_cli,brutal_purge,soft_purge,[]}]},
+   {<<"4.3.[0-1]">>,
+    [{restart_application,emqx_auth_http}]},
+   {<<".*">>,[]}],
+  [{"4.3.2",
+    [{apply,{application,stop,[emqx_auth_http]}},
+     {load_module,emqx_auth_http_app,brutal_purge,soft_purge,[]},
+     {load_module,emqx_auth_http_cli,brutal_purge,soft_purge,[]}]},
+   {<<"4.3.[0-1]">>,
+    [{restart_application,emqx_auth_http}]},
+   {<<".*">>,[]}]}.

+ 15 - 26
apps/emqx_lwm2m/src/emqx_lwm2m.appup.src

@@ -1,27 +1,16 @@
-%% -*-: erlang -*-
+%% -*- mode: erlang -*-
 {VSN,
-  [
-    {<<"4\\.3\\.[0-1]">>, [
-      {restart_application, emqx_lwm2m}
-    ]},
-    {"4.3.2", [
-      {load_module, emqx_lwm2m_message, brutal_purge, soft_purge, []}
-    ]},
-    {"4.3.3", []}, %% only config change
-    {"4.3.4", [
-      {load_module, emqx_lwm2m_protocol, brutal_purge, soft_purge, []}
-    ]}
-  ],
-  [
-    {<<"4\\.3\\.[0-1]">>, [
-      {restart_application, emqx_lwm2m}
-    ]},
-    {"4.3.2", [
-      {load_module, emqx_lwm2m_message, brutal_purge, soft_purge, []}
-    ]},
-    {"4.3.3", []}, %% only config change
-    {"4.3.4", [
-      {load_module, emqx_lwm2m_protocol, brutal_purge, soft_purge, []}
-    ]}
-  ]
-}.
+  [{<<"4\\.3\\.[0-1]">>,
+    [{restart_application,emqx_lwm2m}]},
+   {"4.3.2",
+    [{load_module,emqx_lwm2m_protocol,brutal_purge,soft_purge,[]},
+     {load_module,emqx_lwm2m_message,brutal_purge,soft_purge,[]}]},
+   {"4.3.3",[{load_module,emqx_lwm2m_protocol,brutal_purge,soft_purge,[]}]},
+   {"4.3.4",[{load_module,emqx_lwm2m_protocol,brutal_purge,soft_purge,[]}]}],
+  [{<<"4\\.3\\.[0-1]">>,
+    [{restart_application,emqx_lwm2m}]},
+   {"4.3.2",
+    [{load_module,emqx_lwm2m_protocol,brutal_purge,soft_purge,[]},
+     {load_module,emqx_lwm2m_message,brutal_purge,soft_purge,[]}]},
+   {"4.3.3",[{load_module,emqx_lwm2m_protocol,brutal_purge,soft_purge,[]}]},
+   {"4.3.4",[{load_module,emqx_lwm2m_protocol,brutal_purge,soft_purge,[]}]}]}.

+ 4 - 4
apps/emqx_stomp/src/emqx_stomp.appup.src

@@ -1,16 +1,16 @@
 %% -*- mode: erlang -*-
 {VSN,
   [{"4.3.2",[{load_module,emqx_stomp_protocol,brutal_purge,soft_purge,[]}]},
-   {"4.3.1",[
-     {load_module,emqx_stomp_protocol,brutal_purge,soft_purge,[]},
+   {"4.3.1",
+    [{load_module,emqx_stomp_protocol,brutal_purge,soft_purge,[]},
      {load_module,emqx_stomp_connection,brutal_purge,soft_purge,[]}]},
    {"4.3.0",
     [{restart_application,emqx_stomp},
      {apply,{emqx_stomp,force_clear_after_app_stoped,[]}}]},
    {<<".*">>,[]}],
   [{"4.3.2",[{load_module,emqx_stomp_protocol,brutal_purge,soft_purge,[]}]},
-   {"4.3.1",[
-     {load_module,emqx_stomp_protocol,brutal_purge,soft_purge,[]},
+   {"4.3.1",
+    [{load_module,emqx_stomp_protocol,brutal_purge,soft_purge,[]},
      {load_module,emqx_stomp_connection,brutal_purge,soft_purge,[]}]},
    {"4.3.0",
     [{restart_application,emqx_stomp}]},

+ 10 - 4
apps/emqx_web_hook/src/emqx_web_hook.appup.src

@@ -4,25 +4,31 @@
     [{apply,{application,stop,[emqx_web_hook]}},
      {load_module,emqx_web_hook_app,brutal_purge,soft_purge,[]},
      {load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]},
-   {"4.3.5",[{load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]},
+   {"4.3.5",
+    [{load_module,emqx_web_hook_app,brutal_purge,soft_purge,[]},
+     {load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]},
    {<<"4.3.[0-2]">>,
     [{apply,{application,stop,[emqx_web_hook]}},
      {load_module,emqx_web_hook_app,brutal_purge,soft_purge,[]},
      {load_module,emqx_web_hook,brutal_purge,soft_purge,[]},
      {load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]},
    {<<"4.3.[3-4]">>,
-    [{load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]},
+    [{load_module,emqx_web_hook_app,brutal_purge,soft_purge,[]},
+     {load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]},
    {<<".*">>,[]}],
   [{"4.3.7",
     [{apply,{application,stop,[emqx_web_hook]}},
      {load_module,emqx_web_hook_app,brutal_purge,soft_purge,[]},
      {load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]},
-   {"4.3.5",[{load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]},
+   {"4.3.5",
+    [{load_module,emqx_web_hook_app,brutal_purge,soft_purge,[]},
+     {load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]},
    {<<"4.3.[0-2]">>,
     [{apply,{application,stop,[emqx_web_hook]}},
      {load_module,emqx_web_hook_app,brutal_purge,soft_purge,[]},
      {load_module,emqx_web_hook,brutal_purge,soft_purge,[]},
      {load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]},
    {<<"4.3.[3-4]">>,
-    [{load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]},
+    [{load_module,emqx_web_hook_app,brutal_purge,soft_purge,[]},
+     {load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]},
    {<<".*">>,[]}]}.

+ 72 - 24
src/emqx.appup.src

@@ -1,13 +1,19 @@
 %% -*- mode: erlang -*-
 {VSN,
   [{"4.3.11",
-    [{load_module,emqx_http_lib,brutal_purge,soft_purge,[]}]},
+    [{load_module,emqx_vm,brutal_purge,soft_purge,[]},
+     {load_module,emqx_sys_mon,brutal_purge,soft_purge,[]},
+     {load_module,emqx_http_lib,brutal_purge,soft_purge,[]}]},
    {"4.3.10",
-    [{load_module,emqx_http_lib,brutal_purge,soft_purge,[]},
+    [{load_module,emqx_vm,brutal_purge,soft_purge,[]},
+     {load_module,emqx_sys_mon,brutal_purge,soft_purge,[]},
+     {load_module,emqx_http_lib,brutal_purge,soft_purge,[]},
      {load_module,emqx_app,brutal_purge,soft_purge,[]},
      {load_module,emqx_connection,brutal_purge,soft_purge,[]}]},
    {"4.3.9",
-    [{load_module,emqx_http_lib,brutal_purge,soft_purge,[]},
+    [{load_module,emqx_vm,brutal_purge,soft_purge,[]},
+     {load_module,emqx_sys_mon,brutal_purge,soft_purge,[]},
+     {load_module,emqx_http_lib,brutal_purge,soft_purge,[]},
      {load_module,emqx_connection,brutal_purge,soft_purge,[]},
      {load_module,emqx_channel,brutal_purge,soft_purge,[]},
      {load_module,emqx_cm,brutal_purge,soft_purge,[]},
@@ -18,7 +24,9 @@
      {load_module,emqx_rpc,brutal_purge,soft_purge,[]},
      {load_module,emqx_app,brutal_purge,soft_purge,[]}]},
    {"4.3.8",
-    [{load_module,emqx_http_lib,brutal_purge,soft_purge,[]},
+    [{load_module,emqx_vm,brutal_purge,soft_purge,[]},
+     {load_module,emqx_sys_mon,brutal_purge,soft_purge,[]},
+     {load_module,emqx_http_lib,brutal_purge,soft_purge,[]},
      {load_module,emqx_connection,brutal_purge,soft_purge,[]},
      {load_module,emqx_channel,brutal_purge,soft_purge,[]},
      {load_module,emqx_cm,brutal_purge,soft_purge,[]},
@@ -29,7 +37,9 @@
      {load_module,emqx_rpc,brutal_purge,soft_purge,[]},
      {load_module,emqx_app,brutal_purge,soft_purge,[]}]},
    {"4.3.7",
-    [{load_module,emqx_http_lib,brutal_purge,soft_purge,[]},
+    [{load_module,emqx_vm,brutal_purge,soft_purge,[]},
+     {load_module,emqx_sys_mon,brutal_purge,soft_purge,[]},
+     {load_module,emqx_http_lib,brutal_purge,soft_purge,[]},
      {load_module,emqx_connection,brutal_purge,soft_purge,[]},
      {load_module,emqx_channel,brutal_purge,soft_purge,[]},
      {load_module,emqx_cm,brutal_purge,soft_purge,[]},
@@ -42,7 +52,9 @@
      {load_module,emqx_rpc,brutal_purge,soft_purge,[]},
      {load_module,emqx_app,brutal_purge,soft_purge,[]}]},
    {"4.3.6",
-    [{load_module,emqx_http_lib,brutal_purge,soft_purge,[]},
+    [{load_module,emqx_vm,brutal_purge,soft_purge,[]},
+     {load_module,emqx_sys_mon,brutal_purge,soft_purge,[]},
+     {load_module,emqx_http_lib,brutal_purge,soft_purge,[]},
      {load_module,emqx_connection,brutal_purge,soft_purge,[]},
      {load_module,emqx_channel,brutal_purge,soft_purge,[]},
      {load_module,emqx_cm,brutal_purge,soft_purge,[]},
@@ -56,7 +68,9 @@
      {load_module,emqx_rpc,brutal_purge,soft_purge,[]},
      {load_module,emqx_app,brutal_purge,soft_purge,[]}]},
    {"4.3.5",
-    [{load_module,emqx_http_lib,brutal_purge,soft_purge,[]},
+    [{load_module,emqx_vm,brutal_purge,soft_purge,[]},
+     {load_module,emqx_sys_mon,brutal_purge,soft_purge,[]},
+     {load_module,emqx_http_lib,brutal_purge,soft_purge,[]},
      {load_module,emqx_connection,brutal_purge,soft_purge,[]},
      {load_module,emqx_channel,brutal_purge,soft_purge,[]},
      {load_module,emqx_ws_connection,brutal_purge,soft_purge,[]},
@@ -71,7 +85,9 @@
      {load_module,emqx_rpc,brutal_purge,soft_purge,[]},
      {load_module,emqx_app,brutal_purge,soft_purge,[]}]},
    {"4.3.4",
-    [{load_module,emqx_http_lib,brutal_purge,soft_purge,[]},
+    [{load_module,emqx_vm,brutal_purge,soft_purge,[]},
+     {load_module,emqx_sys_mon,brutal_purge,soft_purge,[]},
+     {load_module,emqx_http_lib,brutal_purge,soft_purge,[]},
      {load_module,emqx_connection,brutal_purge,soft_purge,[]},
      {load_module,emqx_channel,brutal_purge,soft_purge,[]},
      {load_module,emqx_ws_connection,brutal_purge,soft_purge,[]},
@@ -87,7 +103,9 @@
      {load_module,emqx_rpc,brutal_purge,soft_purge,[]},
      {load_module,emqx_app,brutal_purge,soft_purge,[]}]},
    {"4.3.3",
-    [{load_module,emqx_http_lib,brutal_purge,soft_purge,[]},
+    [{load_module,emqx_vm,brutal_purge,soft_purge,[]},
+     {load_module,emqx_sys_mon,brutal_purge,soft_purge,[]},
+     {load_module,emqx_http_lib,brutal_purge,soft_purge,[]},
      {load_module,emqx_connection,brutal_purge,soft_purge,[]},
      {load_module,emqx_channel,brutal_purge,soft_purge,[]},
      {load_module,emqx_alarm_handler,brutal_purge,soft_purge,[]},
@@ -104,7 +122,9 @@
      {load_module,emqx_rpc,brutal_purge,soft_purge,[]},
      {load_module,emqx_app,brutal_purge,soft_purge,[]}]},
    {"4.3.2",
-    [{load_module,emqx_alarm_handler,brutal_purge,soft_purge,[]},
+    [{load_module,emqx_vm,brutal_purge,soft_purge,[]},
+     {load_module,emqx_sys_mon,brutal_purge,soft_purge,[]},
+     {load_module,emqx_alarm_handler,brutal_purge,soft_purge,[]},
      {load_module,emqx_misc,brutal_purge,soft_purge,[]},
      {load_module,emqx_packet,brutal_purge,soft_purge,[]},
      {load_module,emqx_shared_sub,brutal_purge,soft_purge,[]},
@@ -121,7 +141,9 @@
      {load_module,emqx_rpc,brutal_purge,soft_purge,[]},
      {load_module,emqx_app,brutal_purge,soft_purge,[]}]},
    {"4.3.1",
-    [{load_module,emqx_alarm_handler,brutal_purge,soft_purge,[]},
+    [{load_module,emqx_vm,brutal_purge,soft_purge,[]},
+     {load_module,emqx_sys_mon,brutal_purge,soft_purge,[]},
+     {load_module,emqx_alarm_handler,brutal_purge,soft_purge,[]},
      {load_module,emqx_misc,brutal_purge,soft_purge,[]},
      {load_module,emqx_packet,brutal_purge,soft_purge,[]},
      {load_module,emqx_shared_sub,brutal_purge,soft_purge,[]},
@@ -142,7 +164,9 @@
      {load_module,emqx_rpc,brutal_purge,soft_purge,[]},
      {load_module,emqx_app,brutal_purge,soft_purge,[]}]},
    {"4.3.0",
-    [{load_module,emqx_pqueue,brutal_purge,soft_purge,[]},
+    [{load_module,emqx_vm,brutal_purge,soft_purge,[]},
+     {load_module,emqx_sys_mon,brutal_purge,soft_purge,[]},
+     {load_module,emqx_pqueue,brutal_purge,soft_purge,[]},
      {load_module,emqx_mqueue,brutal_purge,soft_purge,[]},
      {load_module,emqx_alarm_handler,brutal_purge,soft_purge,[]},
      {load_module,emqx_misc,brutal_purge,soft_purge,[]},
@@ -168,13 +192,19 @@
      {load_module,emqx_app,brutal_purge,soft_purge,[]}]},
    {<<".*">>,[]}],
   [{"4.3.11",
-    [{load_module,emqx_http_lib,brutal_purge,soft_purge,[]}]},
+    [{load_module,emqx_vm,brutal_purge,soft_purge,[]},
+     {load_module,emqx_sys_mon,brutal_purge,soft_purge,[]},
+     {load_module,emqx_http_lib,brutal_purge,soft_purge,[]}]},
    {"4.3.10",
-    [{load_module,emqx_http_lib,brutal_purge,soft_purge,[]},
+    [{load_module,emqx_vm,brutal_purge,soft_purge,[]},
+     {load_module,emqx_sys_mon,brutal_purge,soft_purge,[]},
+     {load_module,emqx_http_lib,brutal_purge,soft_purge,[]},
      {load_module,emqx_app,brutal_purge,soft_purge,[]},
      {load_module,emqx_connection,brutal_purge,soft_purge,[]}]},
    {"4.3.9",
-    [{load_module,emqx_http_lib,brutal_purge,soft_purge,[]},
+    [{load_module,emqx_vm,brutal_purge,soft_purge,[]},
+     {load_module,emqx_sys_mon,brutal_purge,soft_purge,[]},
+     {load_module,emqx_http_lib,brutal_purge,soft_purge,[]},
      {load_module,emqx_connection,brutal_purge,soft_purge,[]},
      {load_module,emqx_channel,brutal_purge,soft_purge,[]},
      {load_module,emqx_cm,brutal_purge,soft_purge,[]},
@@ -185,7 +215,9 @@
      {load_module,emqx_rpc,brutal_purge,soft_purge,[]},
      {load_module,emqx_app,brutal_purge,soft_purge,[]}]},
    {"4.3.8",
-    [{load_module,emqx_http_lib,brutal_purge,soft_purge,[]},
+    [{load_module,emqx_vm,brutal_purge,soft_purge,[]},
+     {load_module,emqx_sys_mon,brutal_purge,soft_purge,[]},
+     {load_module,emqx_http_lib,brutal_purge,soft_purge,[]},
      {load_module,emqx_connection,brutal_purge,soft_purge,[]},
      {load_module,emqx_channel,brutal_purge,soft_purge,[]},
      {load_module,emqx_cm,brutal_purge,soft_purge,[]},
@@ -196,7 +228,9 @@
      {load_module,emqx_rpc,brutal_purge,soft_purge,[]},
      {load_module,emqx_app,brutal_purge,soft_purge,[]}]},
    {"4.3.7",
-    [{load_module,emqx_http_lib,brutal_purge,soft_purge,[]},
+    [{load_module,emqx_vm,brutal_purge,soft_purge,[]},
+     {load_module,emqx_sys_mon,brutal_purge,soft_purge,[]},
+     {load_module,emqx_http_lib,brutal_purge,soft_purge,[]},
      {load_module,emqx_connection,brutal_purge,soft_purge,[]},
      {load_module,emqx_channel,brutal_purge,soft_purge,[]},
      {load_module,emqx_cm,brutal_purge,soft_purge,[]},
@@ -209,7 +243,9 @@
      {load_module,emqx_rpc,brutal_purge,soft_purge,[]},
      {load_module,emqx_app,brutal_purge,soft_purge,[]}]},
    {"4.3.6",
-    [{load_module,emqx_http_lib,brutal_purge,soft_purge,[]},
+    [{load_module,emqx_vm,brutal_purge,soft_purge,[]},
+     {load_module,emqx_sys_mon,brutal_purge,soft_purge,[]},
+     {load_module,emqx_http_lib,brutal_purge,soft_purge,[]},
      {load_module,emqx_connection,brutal_purge,soft_purge,[]},
      {load_module,emqx_channel,brutal_purge,soft_purge,[]},
      {load_module,emqx_cm,brutal_purge,soft_purge,[]},
@@ -223,7 +259,9 @@
      {load_module,emqx_rpc,brutal_purge,soft_purge,[]},
      {load_module,emqx_app,brutal_purge,soft_purge,[]}]},
    {"4.3.5",
-    [{load_module,emqx_http_lib,brutal_purge,soft_purge,[]},
+    [{load_module,emqx_vm,brutal_purge,soft_purge,[]},
+     {load_module,emqx_sys_mon,brutal_purge,soft_purge,[]},
+     {load_module,emqx_http_lib,brutal_purge,soft_purge,[]},
      {load_module,emqx_connection,brutal_purge,soft_purge,[]},
      {load_module,emqx_channel,brutal_purge,soft_purge,[]},
      {load_module,emqx_ws_connection,brutal_purge,soft_purge,[]},
@@ -238,7 +276,9 @@
      {load_module,emqx_rpc,brutal_purge,soft_purge,[]},
      {load_module,emqx_app,brutal_purge,soft_purge,[]}]},
    {"4.3.4",
-    [{load_module,emqx_http_lib,brutal_purge,soft_purge,[]},
+    [{load_module,emqx_vm,brutal_purge,soft_purge,[]},
+     {load_module,emqx_sys_mon,brutal_purge,soft_purge,[]},
+     {load_module,emqx_http_lib,brutal_purge,soft_purge,[]},
      {load_module,emqx_connection,brutal_purge,soft_purge,[]},
      {load_module,emqx_channel,brutal_purge,soft_purge,[]},
      {load_module,emqx_ws_connection,brutal_purge,soft_purge,[]},
@@ -254,7 +294,9 @@
      {load_module,emqx_rpc,brutal_purge,soft_purge,[]},
      {load_module,emqx_app,brutal_purge,soft_purge,[]}]},
    {"4.3.3",
-    [{load_module,emqx_http_lib,brutal_purge,soft_purge,[]},
+    [{load_module,emqx_vm,brutal_purge,soft_purge,[]},
+     {load_module,emqx_sys_mon,brutal_purge,soft_purge,[]},
+     {load_module,emqx_http_lib,brutal_purge,soft_purge,[]},
      {load_module,emqx_connection,brutal_purge,soft_purge,[]},
      {load_module,emqx_channel,brutal_purge,soft_purge,[]},
      {load_module,emqx_pqueue,brutal_purge,soft_purge,[]},
@@ -271,7 +313,9 @@
      {load_module,emqx_rpc,brutal_purge,soft_purge,[]},
      {load_module,emqx_app,brutal_purge,soft_purge,[]}]},
    {"4.3.2",
-    [{load_module,emqx_pqueue,brutal_purge,soft_purge,[]},
+    [{load_module,emqx_vm,brutal_purge,soft_purge,[]},
+     {load_module,emqx_sys_mon,brutal_purge,soft_purge,[]},
+     {load_module,emqx_pqueue,brutal_purge,soft_purge,[]},
      {load_module,emqx_mqueue,brutal_purge,soft_purge,[]},
      {load_module,emqx_alarm_handler,brutal_purge,soft_purge,[]},
      {load_module,emqx_misc,brutal_purge,soft_purge,[]},
@@ -288,7 +332,9 @@
      {load_module,emqx_rpc,brutal_purge,soft_purge,[]},
      {load_module,emqx_app,brutal_purge,soft_purge,[]}]},
    {"4.3.1",
-    [{load_module,emqx_pqueue,brutal_purge,soft_purge,[]},
+    [{load_module,emqx_vm,brutal_purge,soft_purge,[]},
+     {load_module,emqx_sys_mon,brutal_purge,soft_purge,[]},
+     {load_module,emqx_pqueue,brutal_purge,soft_purge,[]},
      {load_module,emqx_mqueue,brutal_purge,soft_purge,[]},
      {load_module,emqx_alarm_handler,brutal_purge,soft_purge,[]},
      {load_module,emqx_misc,brutal_purge,soft_purge,[]},
@@ -309,7 +355,9 @@
      {load_module,emqx_rpc,brutal_purge,soft_purge,[]},
      {load_module,emqx_app,brutal_purge,soft_purge,[]}]},
    {"4.3.0",
-    [{load_module,emqx_alarm_handler,brutal_purge,soft_purge,[]},
+    [{load_module,emqx_vm,brutal_purge,soft_purge,[]},
+     {load_module,emqx_sys_mon,brutal_purge,soft_purge,[]},
+     {load_module,emqx_alarm_handler,brutal_purge,soft_purge,[]},
      {load_module,emqx_misc,brutal_purge,soft_purge,[]},
      {load_module,emqx_packet,brutal_purge,soft_purge,[]},
      {load_module,emqx_shared_sub,brutal_purge,soft_purge,[]},

+ 9 - 1
src/emqx_sys_mon.erl

@@ -182,7 +182,15 @@ procinfo(Pid) ->
     case {emqx_vm:get_process_info(Pid), emqx_vm:get_process_gc_info(Pid)} of
         {undefined, _} -> undefined;
         {_, undefined} -> undefined;
-        {Info, GcInfo} -> Info ++ GcInfo
+        {Info, GcInfo} -> get_proc_lib_initial_call(Pid) ++ GcInfo ++ Info
+    end.
+
+get_proc_lib_initial_call(Pid) ->
+    case proc_lib:initial_call(Pid) of
+        false ->
+            [];
+        InitialCall ->
+            [{proc_lib_initial_call, InitialCall}]
     end.
 
 safe_publish(Event, WarnMsg) ->

+ 1 - 1
src/emqx_vm.erl

@@ -62,7 +62,7 @@
                          ]).
 
 -define(PROCESS_INFO_KEYS, [initial_call,
-                            current_function,
+                            current_stacktrace,
                             registered_name,
                             status,
                             message_queue_len,

+ 38 - 3
test/emqx_sys_mon_SUITE.erl

@@ -70,23 +70,51 @@ init_per_testcase(t_sys_mon2, Config) ->
            (_) -> ok
         end),
     Config;
+init_per_testcase(t_procinfo, Config) ->
+    emqx_ct_helpers:boot_modules(all),
+    emqx_ct_helpers:start_apps([]),
+    ok = meck:new(emqx_vm, [passthrough, no_history]),
+    Config;
 init_per_testcase(_, Config) ->
     emqx_ct_helpers:boot_modules(all),
     emqx_ct_helpers:start_apps([]),
     Config.
 
+end_per_testcase(t_procinfo, _Config) ->
+    ok = meck:unload(emqx_vm),
+    emqx_ct_helpers:stop_apps([]);
 end_per_testcase(_, _Config) ->
     emqx_ct_helpers:stop_apps([]).
 
 t_procinfo(_) ->
-    ok = meck:new(emqx_vm, [passthrough, no_history]),
     ok = meck:expect(emqx_vm, get_process_info, fun(_) -> [] end),
     ok = meck:expect(emqx_vm, get_process_gc_info, fun(_) -> [] end),
     ?assertEqual([], emqx_sys_mon:procinfo([])),
     ok = meck:expect(emqx_vm, get_process_info, fun(_) -> ok end),
     ok = meck:expect(emqx_vm, get_process_gc_info, fun(_) -> undefined end),
-    ?assertEqual(undefined, emqx_sys_mon:procinfo([])),
-    ok = meck:unload(emqx_vm).
+    ?assertEqual(undefined, emqx_sys_mon:procinfo([])).
+
+t_procinfo_initial_call_and_stacktrace(_) ->
+    SomePid = proc_lib:spawn(?MODULE, some_function, [self(), arg2]),
+    receive
+        {spawned, SomePid} ->
+            ok
+    after 100 ->
+            error(process_not_spawned)
+    end,
+    ProcInfo = emqx_sys_mon:procinfo(SomePid),
+    ?assertEqual(
+       {?MODULE, some_function, ['Argument__1','Argument__2']},
+       proplists:get_value(proc_lib_initial_call, ProcInfo)),
+    ?assertMatch(
+       [{?MODULE, some_function, 2,
+         [{file, _},
+          {line, _}]},
+        {proc_lib, init_p_do_apply, 3,
+         [{file, _},
+          {line, _}]}],
+       proplists:get_value(current_stacktrace, ProcInfo)),
+    SomePid ! stop.
 
 t_sys_mon(_Config) ->
     lists:foreach(
@@ -120,3 +148,10 @@ validate_sys_mon_info(PidOrPort, SysMonName,ValidateInfo, InfoOrPort) ->
 concat_str(ValidateInfo, InfoOrPort, Info) ->
     WarnInfo = io_lib:format(ValidateInfo, [InfoOrPort, Info]),
     lists:flatten(WarnInfo).
+
+some_function(Parent, _Arg2) ->
+    Parent ! {spawned, self()},
+    receive
+        stop ->
+            ok
+    end.