Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions cspell.json
Original file line number Diff line number Diff line change
Expand Up @@ -600,6 +600,7 @@
"vmrcs",
"vmrss",
"vms",
"vmswap",
"vns",
"VTeam",
"vtpm",
Expand Down
27 changes: 1 addition & 26 deletions proxy_agent/src/proxy_agent_status.rs
Original file line number Diff line number Diff line change
Expand Up @@ -336,34 +336,9 @@ impl ProxyAgentStatusTask {
/// If the memory usage exceeds the limits for multiple times, take action (e.g., restart the process).
#[cfg(not(windows))]
fn monitor_memory_usage(&self) {
const RAM_LIMIT_IN_MB: u64 = 20;
match proxy_agent_shared::linux::read_proc_memory_status(std::process::id()) {
Ok(memory_status) => {
if let Some(vmrss_kb) = memory_status.vmrss_kb {
let ram_in_mb = vmrss_kb / 1024;
logger::write_information(format!(
"Current process memory usage: {ram_in_mb} MB",
));

if ram_in_mb > RAM_LIMIT_IN_MB {
logger::write_warning(format!(
"Current process memory usage {ram_in_mb} MB exceeds the limit of {RAM_LIMIT_IN_MB} MB.",
));
// take action if needed, e.g., restart the process
}
} else {
logger::write_information("Current process memory usage: Unknown".to_string());
}
if let Some(vmhwm_kb) = memory_status.vmhwm_kb {
logger::write_information(format!(
"Current process peak memory usage: {} MB",
vmhwm_kb / 1024
));
} else {
logger::write_information(
"Current process peak memory usage: Unknown".to_string(),
);
}
logger::write(format!("Current process memory usage: {memory_status:?} ",));
}
Err(e) => {
logger::write_error(format!("Error reading process memory status: {e}"));
Expand Down
14 changes: 13 additions & 1 deletion proxy_agent_shared/src/linux.rs
Original file line number Diff line number Diff line change
Expand Up @@ -157,14 +157,19 @@ pub fn set_cpu_quota(service_name: &str, cpu_quota: u16) -> Result<()> {

#[derive(Debug)]
pub struct MemStatus {
/// virtual-memory pages currently resident in physical RAM in kilobytes.
pub vmrss_kb: Option<u64>,
/// virtual-memory pages currently swapped out to disk in kilobytes.
pub vmswap_kb: Option<u64>,
/// peak virtual-memory pages currently resident in physical RAM in kilobytes.
pub vmhwm_kb: Option<u64>,
}

pub fn read_proc_memory_status(pid: u32) -> Result<MemStatus> {
let s = fs::read_to_string(format!("/proc/{pid}/status"))?;
let mut vmrss_kb = None;
let mut vmhwm_kb = None;
let mut vmswap_kb = None;
for line in s.lines() {
if line.starts_with("VmRSS:") {
// Format: "VmRSS:\t 12345 kB"
Expand All @@ -173,9 +178,16 @@ pub fn read_proc_memory_status(pid: u32) -> Result<MemStatus> {
} else if line.starts_with("VmHWM:") {
let val = line.split_whitespace().nth(1).and_then(|x| x.parse().ok());
vmhwm_kb = val;
} else if line.starts_with("VmSwap:") {
let val = line.split_whitespace().nth(1).and_then(|x| x.parse().ok());
vmswap_kb = val;
}
}
Ok(MemStatus { vmrss_kb, vmhwm_kb })
Ok(MemStatus {
vmrss_kb,
vmswap_kb,
vmhwm_kb,
})
}

/// Set the file permissions for a file or directory.
Expand Down
17 changes: 11 additions & 6 deletions proxy_agent_shared/src/telemetry/event_reader.rs
Original file line number Diff line number Diff line change
Expand Up @@ -124,10 +124,12 @@ impl EventReader {
Ok(files) => {
let file_count = files.len();
event_count = self.process_events_and_clean(files).await;
let message = format!(
"Telemetry event reader sent {event_count} events from {file_count} files"
logger_manager::write_log(
log::Level::Trace,
format!(
"Telemetry event reader sent {event_count} events from {file_count} files"
),
);
logger_manager::write_info(message);
}
Err(e) => {
logger_manager::write_warn(format!(
Expand Down Expand Up @@ -289,9 +291,12 @@ impl EventReader {
for file in files {
event_count += self.process_one_extension_status_event_file(file).await;
}
logger_manager::write_info( format!(
"Telemetry event reader sent {event_count} extension status events from {file_count} files"
));
logger_manager::write_log(
log::Level::Trace,
format!(
"Telemetry event reader sent {event_count} extension status events from {file_count} files"
),
);

if event_count > 0 {
if let Err(e) = self.common_state.notify_telemetry_event().await {
Expand Down
5 changes: 4 additions & 1 deletion proxy_agent_shared/src/telemetry/event_sender.rs
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,10 @@ impl EventSender {
.await
{
Ok(()) => {
logger_manager::write_info("success updated the vm metadata.".to_string());
logger_manager::write_log(
log::Level::Trace,
"success updated the vm metadata.".to_string(),
);
}
Err(e) => {
logger_manager::write_warn(format!("Failed to update vm metadata with error {e}."));
Expand Down
Loading