09.14、性能优化
性能优化
欢迎回到第 9 章的学习。在上一节,我们学习了微服务间追踪传播。现在我们要学习性能优化,这对于在生产环境中运行可观察性系统非常重要。
本节将学习:采样优化、批处理优化、异步导出、以及资源监控。
采样优化
采样优化的目标是什么? 在保证可观察性的同时,减少数据量和成本,降低 Collector 负载,提高系统性能。
采样优化策略有哪些呢?
第一种:调整采样率。 根据实际需求调整采样率,比如从 100% 降到 10%,减少 90% 的数据量。
第二种:基于条件的采样。 只采样重要的请求,比如错误请求、慢请求、特定路径的请求。更智能,但配置复杂。
第三种:基于父级的采样。 使用
parentbased_traceidratio优化建议: 从高采样率开始,逐步降低,监控可观察性是否受影响,找到平衡点。
配置代码:
文件路径:
src/main/resources/application.properties# Reduce the sampling rate to 5% otel.traces.sampler=traceidratio otel.traces.sampler.arg=0.05 # Or use parent-based sampling (recommended for distributed systems)) # otel.traces.sampler=parentbased_traceidratio # otel.traces.sampler.arg=0.05
批处理优化
批处理优化的目标是什么? 平衡性能和延迟,提高吞吐量,降低网络调用,减少资源使用。
批处理参数优化:
第一个:批次延迟(schedule.delay)。 增加延迟(如 10 秒)可以提高批次大小,减少网络调用,但增加延迟。
第二个:最大批次大小(max.export.batch.size)。 增加批次大小(如 1024)可以提高吞吐量,但增加内存使用。
第三个:最大队列大小(max.queue.size)。 增加队列大小可以缓冲更多数据,但增加内存使用。
优化建议: 从默认值开始,根据实际负载调整,测试不同配置,找到性能和延迟的平衡点。
配置代码:
文件路径:
src/main/resources/application.properties# Batch processing optimization configuration otel.bsp.schedule.delay=10000 otel.bsp.max.queue.size=4096 otel.bsp.max.export.batch.size=1024 otel.bsp.export.timeout=30000
异步导出
异步导出的作用是什么? 避免阻塞业务逻辑,在后台异步处理数据导出,减少对应用性能的影响。
异步导出机制: OpenTelemetry 默认使用异步导出,数据收集和导出是异步的,不会阻塞业务逻辑。
批处理与异步导出的关系: 批处理是异步导出的一部分,数据先收集到内存队列,然后批量导出。
优化建议: 确认使用异步导出(默认),配置批处理参数优化导出性能,监控导出线程使用情况,确保不会阻塞业务逻辑。
验证命令:
# utilized jstack View thread usage jstack <pid> | grep -A 10 "otel" # utilized jvisualvm or JProfiler View thread status # Verify that the export thread does not block the business thread
资源监控
资源监控的作用是什么? 监控可观察性系统本身的资源使用情况,确保系统稳定运行,及时发现资源问题。
监控的指标有哪些呢?
第一个:内存使用。 使用
jstat -gc <pid>第二个:CPU 使用。 使用
tophtop第三个:网络流量。 使用
netstatss第四个:可观察性指标。 在 Grafana 中创建 Dashboard,监控可观察性系统的指标,设置告警。
监控命令示例:
# surveillance JVM memory usage jstat -gc <pid> 1000 # surveillance CPU utilized top -p <pid> # or use htop htop -p <pid> # Monitor network connections netstat -an | grep 4317 # OTLP gRPC ports ss -tn | grep 4317 # Monitor network traffic iftop -i eth0
本节小结
在本节中,我们学习了性能优化:
第一个是采样优化。 调整采样率、基于条件的采样、基于父级的采样,减少数据量,保持可观察性。
第二个是批处理优化。 优化批次延迟、批次大小、队列大小,平衡性能和延迟,提高吞吐量。
第三个是异步导出。 使用异步导出,避免阻塞业务逻辑,在后台处理数据导出。
第四个是资源监控。 监控内存、CPU、网络使用,创建 Dashboard,设置告警,确保系统稳定运行。
性能优化流程: 采样优化 → 批处理优化 → 异步导出 → 资源监控 → 稳定运行。
这就是性能优化。通过合理的优化,我们可以在生产环境中稳定运行可观察性系统。
在下一节,我们将进行练习:构建完整的后端服务。通过完整的练习,巩固前面学习的知识。