日志导致的io负载高和cpu飙升问题

文章讲述了项目上线前对查询接口性能测试中遇到的问题,经过分析发现瓶颈在于写入日志和Kafka日志推送。通过调整策略,关闭不必要的日志并优化Kafka组件,最终提升了吞吐量。

1.问题

      项目上线前需要对接口进行性能测试,发现有2个查询接口性能始终达不到上线要求

image.png

2.分析过程

取线程快照

打印线程堆栈日志:

通过上面发现54个线程处于 waiting on condition 状态,在等待写入磁盘日志,所以断定瓶颈在写入日志io这块所以将日志打印关闭,再部署一版试试。

部署后发现,吞吐量上不去还是400,

image.png

查看cpu和io情况,发现io已经正常,cpu还是很高

image.png

image.png

image.png

继续打印线程堆栈日志:

通过以上发现有线程阻塞现象,Blocked on object monitor 这段代码是日志推送kafka,在等待对象锁

继续关闭日志推送kfka,继续观察

image.png

发现吞吐量达到了4000+

3.解决

1.关闭线上日志,仅保留报错日志。重新优化kfka日志推送组件,优化加密逻辑

4.参考文档

1、Linux的vmstat命令_linux vmstat命令找不到_Simple_Demo的博客-优快云博客

2、Linux的iostat命令-优快云博客

<think>我们讨论的是CPU负载CPU可用内存之间的关系。注意,虽然问题中提到了“CPU可用内存”,但内存通常不称为“CPU可用内存”,而是系统可用内存。这里可能是指与CPU相关的内存使用情况,或者系统可用内存。我们理解为系统可用内存。 CPU负载系统可用内存之间的关系可以从以下几个方面分析: 1. **直接关系**: - CPU负载(Load Average)表示系统在特定时间间隔内处于可运行状态(正在运行或等待运行)的进程平均数。它主要反映CPU的繁忙程度,而内存反映的是系统内存的使用情况。 - 两者没有直接必然联系:CPU负载可能是因为计算密集型任务,而内存充足;反之,内存不足时可能因为频繁的页面交换(swap)导致CPU负载升高。 2. **间接关系(内存不足导致CPU负载升高)**: - 当系统可用内存不足时,内核会进行内存回收(如kswapd进程活动增加),包括页面回收、交换(swap)等操作。这些操作会消耗CPU资源,从而导致CPU负载升高。 - 特别是当系统开始使用交换空间(swap)时,频繁的页面换入换出(swap in/out)会导致大量的I/O等待,进而增加CPU的I/O等待时间(wa状态),从而表现为负载升高。 3. **其他情况**: - 如果系统有充足的内存,但CPU负载,这通常是由于进程本身需要大量计算(如科学计算、编译等)导致的,与内存关系不大。 - 但是,如果程序需要频繁访问大量内存,而内存充足,则不会导致额外的磁盘I/O,因此不会因为内存问题增加CPU负载。反之,如果内存不足,则会导致缺页中断(page fault)增加,进而引发磁盘I/O,使得CPU在I/O等待上花费更多时间。 4. **监控指标**: - 使用`top`或`vmstat`等工具可以同时观察CPU负载(load average)内存使用情况(free/buffers/cache, swap等)。 - 当内存不足时,通常伴随以下现象: - 较的`si`(swap in)`so`(swap out)值(在`vmstat`中)。 - 较的`wa`(I/O等待)百分比(在`top`中)。 - 可用内存(available)持续偏低。 总结:CPU负载可用内存之间没有直接关系,但内存不足可能间接导致CPU负载升高,主要原因是内存回收交换操作增加了CPU的工作负担。 §§相关问题§§ 1. 如何区分CPU负载是由计算密集型任务还是内存不足引起的? 2. 在Linux系统中,有哪些命令可以同时监控CPU负载内存使用情况? 3. 当内存不足导致CPU负载升高时,应该如何优化系统? 4. 什么是I/O等待(wa)?它与内存不足有什么关系? 5. 如何配置交换空间(swap)以减少因内存不足对CPU负载的影响?</think>CPU负载CPU可用内存之间没有直接因果关系,但存在间接关联相互影响机制: ### 核心关系分析 1. **独立运作机制** - **CPU负载**:反映处理器任务队列长度(运行中+等待进程数),主要受计算密集型任务影响 - **可用内存**:指未被占用的物理内存,由应用内存需求决定 *两者本质上是独立资源指标* 2. **间接影响路径** - **内存不足 → CPU负载升高** - 当可用内存过低时触发频繁的**页面回收**(kswapd进程活跃) - 引发大量**磁盘I/O**(交换匿名页/回写文件页) - 导致CPU陷入I/O等待状态(`%wa`升高) ```bash # 典型症状(vmstat示例) procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 3 12 81428 3840 320 90124 0 15 1024 2048 890 1200 10 15 0 75 0 # ↑ wa(I/O等待)达75% ↑ ``` - **CPU负载 → 内存力** - 计算密集型任务加速内存分配(如科学计算) - 并发服务创建大量进程/线程(每个消耗栈空间) - JVM等运行时在CPU繁忙时延迟GC,导致内存堆积 3. **临界点现象** - 当可用内存低于**低水印阈值**时: - 直接回收机制激活(`direct reclaim`) - 进程可能因分配内存被阻塞(`D`状态) - CPU需处理回收中断,加剧负载 ### 诊断工具关联 | 指标 | 内存不足影响 | CPU负载影响 | |--------------|-----------------------------|----------------------------| | **vmstat** | `si/so`(交换)升高 | `r`(运行队列) > CPU核数 | | **top** | `Mem avail`极低 + `S`列`D`状态进程 | `%wa` + `load average` >5 | | **sar** | `pgscank/pgsteal`激增 | `%user/%sys`持续位 | ### 优化方向 - **内存不足导致CPU负载**: 增加物理内存 → 调整`swappiness` → 优化应用内存使用 - **CPU负载引发内存力**: 扩展CPU资源 → 优化算法复杂度 → 限制进程并发数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值