mirror of
https://github.com/openmhz/trunk-server.git
synced 2026-11-12 16:57:39 -05:00
Reduce backend per-upload CPU to relieve upload timeouts
The Node main thread was saturated at about 39 uploads/s, overflowing the listen queue so uploads timed out connecting from nginx. - Enable keepAlive on the S3 agent; every upload did a full TLS handshake - Remove OpenTelemetry tracing - Cache the system key lookup for 60s - Use lean queries when listing calls - Serialize each call once in notify_clients, not per recipient - Add an nginx upstream keepalive pool, and hold Node's keepAliveTimeout above it so nginx never reuses a connection Node has closed Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,69 +0,0 @@
|
||||
'use strict';
|
||||
|
||||
const opentelemetry = require('@opentelemetry/sdk-node');
|
||||
const { MongoDBInstrumentation } = require('@opentelemetry/instrumentation-mongodb');
|
||||
const { TraceIdRatioBasedSampler } = require('@opentelemetry/sdk-trace-node');
|
||||
const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-http');
|
||||
const { getNodeAutoInstrumentations } = require('@opentelemetry/auto-instrumentations-node');
|
||||
const { diag, DiagConsoleLogger, DiagLogLevel } = require('@opentelemetry/api');
|
||||
const {
|
||||
Detector,
|
||||
DetectorSync,
|
||||
IResource,
|
||||
ResourceDetectionConfig,
|
||||
envDetectorSync,
|
||||
hostDetectorSync,
|
||||
processDetectorSync,
|
||||
} = require("@opentelemetry/resources")
|
||||
// const {
|
||||
// dockerCGroupV1Detector,
|
||||
// } = require('@opentelemetry/resource-detector-docker');
|
||||
|
||||
// For troubleshooting, set the log level to DiagLogLevel.DEBUG
|
||||
diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.WARN);
|
||||
|
||||
console.log("Starting OpenTelemetry Node SDK");
|
||||
console.log("OTEL_EXPORTER_OTLP_ENDPOINT: " + process.env.OTEL_EXPORTER_OTLP_ENDPOINT);
|
||||
console.log("OTEL_EXPORTER_OTLP_HEADERS: " + process.env.OTEL_EXPORTER_OTLP_HEADERS);
|
||||
console.log("OTEL_SERVICE_NAME: " + process.env.OTEL_SERVICE_NAME);
|
||||
|
||||
|
||||
// from https://github.com/open-telemetry/opentelemetry-js/issues/4638
|
||||
// this is a workaround to wait for async attributes to be resolved
|
||||
function awaitAttributes(detector){
|
||||
return {
|
||||
async detect(config) {
|
||||
const resource = detector.detect(config)
|
||||
await resource.waitForAsyncAttributes()
|
||||
|
||||
return resource
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
const samplePercentage = 0.05;
|
||||
|
||||
const sdk = new opentelemetry.NodeSDK({
|
||||
traceExporter: new OTLPTraceExporter(),
|
||||
sampler: new TraceIdRatioBasedSampler(samplePercentage),
|
||||
instrumentations: [
|
||||
new MongoDBInstrumentation({
|
||||
// see under for available configuration
|
||||
}),
|
||||
getNodeAutoInstrumentations({
|
||||
// we recommend disabling fs autoinstrumentation since it can be noisy
|
||||
// and expensive during startup
|
||||
'@opentelemetry/instrumentation-fs': {
|
||||
enabled: false,
|
||||
},
|
||||
}),
|
||||
],
|
||||
resourceDetectors: [
|
||||
awaitAttributes(envDetectorSync),
|
||||
awaitAttributes(processDetectorSync),
|
||||
awaitAttributes(hostDetectorSync),
|
||||
],
|
||||
//resourceDetectors: [dockerCGroupV1Detector],
|
||||
});
|
||||
|
||||
sdk.start();
|
||||
Reference in New Issue
Block a user