Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:25
erlang
0402-logger_olp-check_load-1-only-retrieve-memo...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0402-logger_olp-check_load-1-only-retrieve-memory-metric-.patch of Package erlang
From 748ce3e58ab0d58fb84e71a44bc861f6e904f4e1 Mon Sep 17 00:00:00 2001 From: Mikael Pettersson <mikael.pettersson@klarna.com> Date: Mon, 5 Jun 2023 10:42:59 +0200 Subject: [PATCH] logger_olp:check_load/1: only retrieve memory metric if absolutely necessary Fixes #7417 --- lib/kernel/src/logger_olp.erl | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/lib/kernel/src/logger_olp.erl b/lib/kernel/src/logger_olp.erl index 6bbf9963b6..ca5242135c 100644 --- a/lib/kernel/src/logger_olp.erl +++ b/lib/kernel/src/logger_olp.erl @@ -473,7 +473,7 @@ check_load(State = #{id:=_Name, mode_ref := ModeRef, mode := Mode, sync_mode_qlen := SyncModeQLen, drop_mode_qlen := DropModeQLen, flush_qlen := FlushQLen}) -> - {_,Mem} = process_info(self(), memory), + Mem = maybe_self_memory(State), ?observe(_Name,{max_mem,Mem}), {_,QLen} = process_info(self(), message_queue_len), ?observe(_Name,{max_qlen,QLen}), @@ -507,6 +507,24 @@ check_load(State = #{id:=_Name, mode_ref := ModeRef, mode := Mode, ?update_other(flushes,FLUSHES,_NewFlushes, State4#{last_qlen => QLen})}. +%% Calling process_info(self(), memory) is linear on the size of the message queue, +%% which is an extremely bad thing to do in high load situations, so only do that +%% if the value actually is required. +-ifdef(OBSERVER_MOD). % does ?observe/2 use Mem +maybe_self_memory(_State) -> do_self_memory(). +-else. +-ifdef(SAVE_STATS). % does ?update_max_mem/2 use Mem +maybe_self_memory(_State) -> do_self_memory(). +-else. +maybe_self_memory(#{overload_kill_enable := KillIfOL}) -> % does kill_if_choked/3 use Mem + KillIfOL andalso do_self_memory(). % deliberate non-number if unused +-endif. +-endif. + +do_self_memory() -> + {_, Mem} = process_info(self(), memory), + Mem. + limit_burst(#{burst_limit_enable := false}=State) -> {true,State}; limit_burst(#{burst_win_ts := BurstWinT0, -- 2.35.3
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor