fix(pprof): Fixed the problem that pprof crate does not support the window platform (#1681)

Signed-off-by: houseme <housemecn@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
houseme
2026-02-01 00:12:55 +08:00
committed by GitHub
parent 087f58b7c8
commit 07cf2feaad
5 changed files with 57 additions and 132 deletions
+6 -1
View File
@@ -125,7 +125,6 @@ urlencoding = { workspace = true }
uuid = { workspace = true }
zip = { workspace = true }
libc = { workspace = true }
pprof = { workspace = true }
# Observability and Metrics
metrics = { workspace = true }
@@ -141,14 +140,20 @@ libsystemd.workspace = true
[target.'cfg(not(all(target_os = "linux", target_env = "gnu", target_arch = "x86_64")))'.dependencies]
mimalloc = { workspace = true }
# Note: If you want to *explicitly* exclude Windows from a target dependency set,
# you can use a cfg like the following instead:
[target.'cfg(all(not(target_os = "windows"), not(all(target_os = "linux", target_env = "gnu", target_arch = "x86_64"))))'.dependencies]
starshard = { workspace = true }
backtrace = { workspace = true }
rand = { workspace = true }
pprof = { workspace = true }
[target.'cfg(all(target_os = "linux", target_env = "gnu", target_arch = "x86_64"))'.dependencies]
tikv-jemallocator = { workspace = true }
tikv-jemalloc-ctl = { workspace = true }
jemalloc_pprof = { workspace = true }
pprof = { workspace = true }
[dev-dependencies]
uuid = { workspace = true, features = ["v4"] }
+8 -1
View File
@@ -70,11 +70,18 @@ use tracing::{debug, error, info, instrument, warn};
#[global_allocator]
static GLOBAL: tikv_jemallocator::Jemalloc = tikv_jemallocator::Jemalloc;
#[cfg(not(all(target_os = "linux", target_env = "gnu", target_arch = "x86_64")))]
#[cfg(all(
not(target_os = "windows"),
not(all(target_os = "linux", target_env = "gnu", target_arch = "x86_64"))
))]
#[global_allocator]
static GLOBAL: profiling::allocator::TracingAllocator<mimalloc::MiMalloc> =
profiling::allocator::TracingAllocator::new(mimalloc::MiMalloc);
#[cfg(target_os = "windows")]
#[global_allocator]
static GLOBAL: mimalloc::MiMalloc = mimalloc::MiMalloc;
fn main() {
let runtime = server::get_tokio_runtime_builder()
.build()
+38 -3
View File
@@ -12,10 +12,42 @@
// See the License for the specific language governing permissions and
// limitations under the License.
#[cfg(not(all(target_os = "linux", target_env = "gnu", target_arch = "x86_64")))]
#[cfg(all(
not(target_os = "windows"),
not(all(target_os = "linux", target_env = "gnu", target_arch = "x86_64"))
))]
pub mod allocator;
#[cfg(not(all(target_os = "linux", target_env = "gnu", target_arch = "x86_64")))]
#[cfg(target_os = "windows")]
mod windows_impl {
use std::path::PathBuf;
use std::time::Duration;
use tracing::info;
pub async fn init_from_env() {
info!("Profiling initialization skipped on Windows platform (not supported)");
}
/// Stop all background profiling tasks
pub fn shutdown_profiling() {
info!("profiling: shutdown called on Windows platform (no-op)");
}
pub async fn dump_cpu_pprof_for(_duration: Duration) -> Result<PathBuf, String> {
Err("CPU profiling is not supported on Windows platform".to_string())
}
pub async fn dump_memory_pprof_now() -> Result<PathBuf, String> {
Err("Memory profiling is not supported on Windows platform".to_string())
}
}
#[cfg(target_os = "windows")]
pub use windows_impl::{dump_cpu_pprof_for, dump_memory_pprof_now, init_from_env, shutdown_profiling};
#[cfg(all(
not(target_os = "windows"),
not(all(target_os = "linux", target_env = "gnu", target_arch = "x86_64"))
))]
mod generic_impl {
use super::allocator;
use rustfs_config::{
@@ -123,7 +155,10 @@ mod generic_impl {
}
}
#[cfg(not(all(target_os = "linux", target_env = "gnu", target_arch = "x86_64")))]
#[cfg(all(
not(target_os = "windows"),
not(all(target_os = "linux", target_env = "gnu", target_arch = "x86_64"))
))]
pub use generic_impl::{dump_cpu_pprof_for, dump_memory_pprof_now, init_from_env, shutdown_profiling};
#[cfg(all(target_os = "linux", target_env = "gnu", target_arch = "x86_64"))]