@@ -201,21 +201,31 @@ pub static PROCESS_MEMORY_BYTES_AVG: Lazy<Gauge> = Lazy::new(|| {
201201 )
202202 . expect ( "metric can be created" )
203203} ) ;
204- pub static PROCESS_METRICS_INIT : OnceLock < ( f64 , u64 , u64 ) > = OnceLock :: new ( ) ;
204+
205+ pub static PROCESS_MEMORY_LIMIT_BYTES : Lazy < Gauge > = Lazy :: new ( || {
206+ Gauge :: with_opts (
207+ Opts :: new (
208+ "process_memory_limit_bytes" ,
209+ "Cgroup memory limit in bytes, or total system memory when cgroup limits are unavailable" ,
210+ )
211+ . namespace ( METRICS_NAMESPACE ) ,
212+ )
213+ . expect ( "metric can be created" )
214+ } ) ;
215+
216+ pub static PROCESS_METRICS_INIT : OnceLock < ( f64 , u64 ) > = OnceLock :: new ( ) ;
205217pub struct ProcessMetricsAccumulator {
206218 cpu_usage_avg : AtomicF64 ,
207219 memory_bytes_avg : AtomicF64 ,
208- total_memory : AtomicF64 ,
209220}
210221
211222impl Default for ProcessMetricsAccumulator {
212223 fn default ( ) -> Self {
213224 // PROCESS_METRICS_INIT must be initialized by now
214- let ( cpu, mem, total_mem ) = * PROCESS_METRICS_INIT . get ( ) . unwrap ( ) ;
225+ let ( cpu, mem) = * PROCESS_METRICS_INIT . get ( ) . unwrap ( ) ;
215226 Self {
216227 cpu_usage_avg : AtomicF64 :: new ( cpu) ,
217228 memory_bytes_avg : AtomicF64 :: new ( mem as f64 ) ,
218- total_memory : AtomicF64 :: new ( total_mem as f64 ) ,
219229 }
220230 }
221231}
@@ -248,10 +258,6 @@ impl ProcessMetricsAccumulator {
248258 pub fn get_mem ( & self ) -> f64 {
249259 self . memory_bytes_avg . get ( )
250260 }
251-
252- pub fn get_total_mem ( & self ) -> f64 {
253- self . total_memory . get ( )
254- }
255261}
256262
257263pub static PROCESS_METRICS_ACCUMULATOR : Lazy < ProcessMetricsAccumulator > =
@@ -260,12 +266,13 @@ pub static PROCESS_METRICS_ACCUMULATOR: Lazy<ProcessMetricsAccumulator> =
260266pub fn record_process_metrics_sample ( cpu_usage_percent : f64 , memory_bytes : u64 , total_mem : u64 ) {
261267 if PROCESS_METRICS_INIT . get ( ) . is_none ( ) {
262268 // first measurement
263- let _ = PROCESS_METRICS_INIT . set ( ( cpu_usage_percent, memory_bytes, total_mem ) ) ;
269+ let _ = PROCESS_METRICS_INIT . set ( ( cpu_usage_percent, memory_bytes) ) ;
264270 }
265271 let ( average_cpu_usage, average_memory_bytes) =
266272 PROCESS_METRICS_ACCUMULATOR . record ( cpu_usage_percent, memory_bytes) ;
267273 PROCESS_CPU_USAGE_PERCENT_AVG . set ( average_cpu_usage) ;
268274 PROCESS_MEMORY_BYTES_AVG . set ( average_memory_bytes) ;
275+ PROCESS_MEMORY_LIMIT_BYTES . set ( total_mem as f64 ) ;
269276}
270277
271278#[ cfg( test) ]
@@ -277,7 +284,7 @@ mod process_metrics_tests {
277284 #[ test]
278285 fn averages_process_metric_samples ( ) {
279286 // init PROCESS_METRICS_INIT
280- PROCESS_METRICS_INIT . get_or_init ( || ( 10.0 , 100 , 100 ) ) ;
287+ PROCESS_METRICS_INIT . get_or_init ( || ( 10.0 , 100 ) ) ;
281288 let accumulator = ProcessMetricsAccumulator :: default ( ) ;
282289
283290 assert_eq ! ( accumulator. record( 10.0 , 100 ) , ( 10.0 , 100.0 ) ) ;
@@ -791,6 +798,9 @@ fn custom_metrics(registry: &Registry) {
791798 registry
792799 . register ( Box :: new ( PROCESS_MEMORY_BYTES_AVG . clone ( ) ) )
793800 . expect ( "metric can be registered" ) ;
801+ registry
802+ . register ( Box :: new ( PROCESS_MEMORY_LIMIT_BYTES . clone ( ) ) )
803+ . expect ( "metric can be registered" ) ;
794804 registry
795805 . register ( Box :: new ( QUERY_EXECUTE_TIME . clone ( ) ) )
796806 . expect ( "metric can be registered" ) ;
0 commit comments