improve alloc stats interface; fix admin command formatting
Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
parent
2a304c2b6c
commit
16e76d45cb
5 changed files with 20 additions and 24 deletions
|
@ -632,12 +632,12 @@ pub(super) async fn resolve_true_destination(
|
||||||
pub(super) fn memory_stats() -> RoomMessageEventContent {
|
pub(super) fn memory_stats() -> RoomMessageEventContent {
|
||||||
let html_body = conduit::alloc::memory_stats();
|
let html_body = conduit::alloc::memory_stats();
|
||||||
|
|
||||||
if html_body.is_empty() {
|
if html_body.is_none() {
|
||||||
return RoomMessageEventContent::text_plain("malloc stats are not supported on your compiled malloc.");
|
return RoomMessageEventContent::text_plain("malloc stats are not supported on your compiled malloc.");
|
||||||
}
|
}
|
||||||
|
|
||||||
RoomMessageEventContent::text_html(
|
RoomMessageEventContent::text_html(
|
||||||
"This command's output can only be viewed by clients that render HTML.".to_owned(),
|
"This command's output can only be viewed by clients that render HTML.".to_owned(),
|
||||||
html_body,
|
html_body.expect("string result"),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,17 +20,12 @@ pub(super) async fn show_config(_body: Vec<&str>) -> Result<RoomMessageEventCont
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(super) async fn memory_usage(_body: Vec<&str>) -> Result<RoomMessageEventContent> {
|
pub(super) async fn memory_usage(_body: Vec<&str>) -> Result<RoomMessageEventContent> {
|
||||||
let response0 = services().memory_usage().await?;
|
let services_usage = services().memory_usage().await?;
|
||||||
let response1 = services().db.db.memory_usage()?;
|
let database_usage = services().db.db.memory_usage()?;
|
||||||
let response2 = conduit::alloc::memory_usage();
|
let allocator_usage = conduit::alloc::memory_usage().map_or(String::new(), |s| format!("\nAllocator:\n{s}"));
|
||||||
|
|
||||||
Ok(RoomMessageEventContent::text_plain(format!(
|
Ok(RoomMessageEventContent::text_plain(format!(
|
||||||
"Services:\n{response0}\nDatabase:\n{response1}\n{}",
|
"Services:\n{services_usage}\nDatabase:\n{database_usage}{allocator_usage}",
|
||||||
if !response2.is_empty() {
|
|
||||||
format!("Allocator:\n {response2}")
|
|
||||||
} else {
|
|
||||||
String::new()
|
|
||||||
}
|
|
||||||
)))
|
)))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
//! Default allocator with no special features
|
//! Default allocator with no special features
|
||||||
|
|
||||||
/// Always returns the empty string
|
/// Always returns None
|
||||||
#[must_use]
|
#[must_use]
|
||||||
pub fn memory_stats() -> String { String::default() }
|
pub fn memory_stats() -> Option<String> { None }
|
||||||
|
|
||||||
/// Always returns the empty string
|
/// Always returns None
|
||||||
#[must_use]
|
#[must_use]
|
||||||
pub fn memory_usage() -> String { String::default() }
|
pub fn memory_usage() -> Option<String> { None }
|
||||||
|
|
|
@ -4,9 +4,10 @@
|
||||||
static HMALLOC: hardened_malloc_rs::HardenedMalloc = hardened_malloc_rs::HardenedMalloc;
|
static HMALLOC: hardened_malloc_rs::HardenedMalloc = hardened_malloc_rs::HardenedMalloc;
|
||||||
|
|
||||||
#[must_use]
|
#[must_use]
|
||||||
pub fn memory_usage() -> String {
|
//TODO: get usage
|
||||||
String::default() //TODO: get usage
|
pub fn memory_usage() -> Option<string> { None }
|
||||||
}
|
|
||||||
|
|
||||||
#[must_use]
|
#[must_use]
|
||||||
pub fn memory_stats() -> String { "Extended statistics are not available from hardened_malloc.".to_owned() }
|
pub fn memory_stats() -> Option<String> {
|
||||||
|
Some("Extended statistics are not available from hardened_malloc.".to_owned())
|
||||||
|
}
|
||||||
|
|
|
@ -10,7 +10,7 @@ use tikv_jemallocator as jemalloc;
|
||||||
static JEMALLOC: jemalloc::Jemalloc = jemalloc::Jemalloc;
|
static JEMALLOC: jemalloc::Jemalloc = jemalloc::Jemalloc;
|
||||||
|
|
||||||
#[must_use]
|
#[must_use]
|
||||||
pub fn memory_usage() -> String {
|
pub fn memory_usage() -> Option<String> {
|
||||||
use mallctl::stats;
|
use mallctl::stats;
|
||||||
|
|
||||||
let mibs = |input: Result<usize, mallctl::Error>| {
|
let mibs = |input: Result<usize, mallctl::Error>| {
|
||||||
|
@ -27,14 +27,14 @@ pub fn memory_usage() -> String {
|
||||||
let metadata = mibs(stats::metadata::read());
|
let metadata = mibs(stats::metadata::read());
|
||||||
let resident = mibs(stats::resident::read());
|
let resident = mibs(stats::resident::read());
|
||||||
let retained = mibs(stats::retained::read());
|
let retained = mibs(stats::retained::read());
|
||||||
format!(
|
Some(format!(
|
||||||
"allocated: {allocated:.2} MiB\nactive: {active:.2} MiB\nmapped: {mapped:.2} MiB\nmetadata: {metadata:.2} \
|
"allocated: {allocated:.2} MiB\nactive: {active:.2} MiB\nmapped: {mapped:.2} MiB\nmetadata: {metadata:.2} \
|
||||||
MiB\nresident: {resident:.2} MiB\nretained: {retained:.2} MiB\n"
|
MiB\nresident: {resident:.2} MiB\nretained: {retained:.2} MiB\n"
|
||||||
)
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[must_use]
|
#[must_use]
|
||||||
pub fn memory_stats() -> String {
|
pub fn memory_stats() -> Option<String> {
|
||||||
const MAX_LENGTH: usize = 65536 - 4096;
|
const MAX_LENGTH: usize = 65536 - 4096;
|
||||||
|
|
||||||
let opts_s = "d";
|
let opts_s = "d";
|
||||||
|
@ -51,7 +51,7 @@ pub fn memory_stats() -> String {
|
||||||
unsafe { ffi::malloc_stats_print(Some(malloc_stats_cb), opaque, opts_p) };
|
unsafe { ffi::malloc_stats_print(Some(malloc_stats_cb), opaque, opts_p) };
|
||||||
|
|
||||||
str.truncate(MAX_LENGTH);
|
str.truncate(MAX_LENGTH);
|
||||||
format!("<pre><code>{str}</code></pre>")
|
Some(format!("<pre><code>{str}</code></pre>"))
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" fn malloc_stats_cb(opaque: *mut c_void, msg: *const c_char) {
|
extern "C" fn malloc_stats_cb(opaque: *mut c_void, msg: *const c_char) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue