<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>运维 &#8211; mylogs.cn</title>
	<atom:link href="https://mylogs.cn/tag/%e8%bf%90%e7%bb%b4/feed/" rel="self" type="application/rss+xml" />
	<link>https://mylogs.cn</link>
	<description>发现、记录、分享</description>
	<lastBuildDate>Fri, 14 Aug 2026 11:40:35 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
	<item>
		<title>Kubernetes 里设了 CPU 限制，你的应用可能比想象中慢得多</title>
		<link>https://mylogs.cn/kubernetes-%e9%87%8c%e8%ae%be%e4%ba%86-cpu-%e9%99%90%e5%88%b6%ef%bc%8c%e4%bd%a0%e7%9a%84%e5%ba%94%e7%94%a8%e5%8f%af%e8%83%bd%e6%af%94%e6%83%b3%e8%b1%a1%e4%b8%ad%e6%85%a2%e5%be%97%e5%a4%9a/</link>
		
		<dc:creator><![CDATA[steve, zhang]]></dc:creator>
		<pubDate>Fri, 14 Aug 2026 11:39:39 +0000</pubDate>
				<category><![CDATA[科技]]></category>
		<category><![CDATA[Kubernetes]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[云原生]]></category>
		<category><![CDATA[容器]]></category>
		<category><![CDATA[性能优化]]></category>
		<category><![CDATA[运维]]></category>
		<guid isPermaLink="false">https://mylogs.cn/kubernetes-%e9%87%8c%e8%ae%be%e4%ba%86-cpu-%e9%99%90%e5%88%b6%ef%bc%8c%e4%bd%a0%e7%9a%84%e5%ba%94%e7%94%a8%e5%8f%af%e8%83%bd%e6%af%94%e6%83%b3%e8%b1%a1%e4%b8%ad%e6%85%a2%e5%be%97%e5%a4%9a/</guid>

					<description><![CDATA[Kubernetes 里设了 CPU 限制，你的应用可能比想象中慢得多 在 Kubernetes 集群中给容器 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Kubernetes 里设了 CPU 限制，你的应用可能比想象中慢得多</h2>



<p class="wp-block-paragraph">在 Kubernetes 集群中给容器设置 <code>limits.cpu</code> 是很多团队的标准操作。但一项基于真实集群的对照测试表明：<strong>CPU 限制不仅不能保护邻居 Pod，反而会让被限制的应用频繁冻结、尾延迟飙升、启动时间翻倍。</strong></p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a7eff705567f&quot;}" data-wp-interactive="core/image" data-wp-key="6a7eff705567f" class="wp-block-image size-large aligncenter wp-lightbox-container"><img fetchpriority="high" decoding="async" width="1200" height="600" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://mylogs.cn/wp-content/uploads/2026/08/572e71a8c5fa1641c907b7cf50dfa30f_header.webp" alt="Kubernetes 里设了 CPU 限制，你的应用可能比想象中慢得多" class="wp-image-4829" style="max-width:100%;height:auto;" srcset="https://mylogs.cn/wp-content/uploads/2026/08/572e71a8c5fa1641c907b7cf50dfa30f_header.webp 1200w, https://mylogs.cn/wp-content/uploads/2026/08/572e71a8c5fa1641c907b7cf50dfa30f_header-300x150.webp 300w, https://mylogs.cn/wp-content/uploads/2026/08/572e71a8c5fa1641c907b7cf50dfa30f_header-1024x512.webp 1024w, https://mylogs.cn/wp-content/uploads/2026/08/572e71a8c5fa1641c907b7cf50dfa30f_header-768x384.webp 768w" sizes="(max-width: 1200px) 100vw, 1200px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">图片来源：GitHub／k8s-cpu-limits-analyzed 项目页</figcaption></figure>





<h2 class="wp-block-heading">CPU 请求与限制是两回事</h2>



<p class="wp-block-paragraph">Kubernetes 中每个 Pod 可以声明两种 CPU 参数：</p>



<p class="wp-block-paragraph">&#8211; <strong>request（请求）</strong>：告诉调度器「这个 Pod 至少需要多少算力」。调度器按 request 总和放置 Pod，确保节点容量不被超卖。
&#8211; <strong>limit（限制）</strong>：一个硬性天花板。一旦 Pod 在某个时间窗口内用完配额，Linux 内核会直接冻结整个容器。</p>



<p class="wp-block-paragraph">测试在同一台 4 核节点上部署了两个完全相同的 .NET 10 API 服务。两者都请求 250m（四分之一核）CPU，唯一的区别是一个设了 500m 的 limit，另一个不设。</p>



<h2 class="wp-block-heading">内核如何执行限制</h2>



<p class="wp-block-paragraph">Linux 以 <strong>100 毫秒</strong>为周期执行 CPU 配额管理。500m 的 limit 意味着每个窗口只有 50 毫秒的实际 CPU 时间可用。预算耗尽后，内核冻结整个容器的所有线程——包括 HTTP 处理器、后台消费者和垃圾回收器。</p>



<p class="wp-block-paragraph">一个运行 8 个繁忙线程的服务可以在约 12.5 毫秒内耗尽全部配额。这意味着<strong>每秒最多发生 10 次冻结</strong>。</p>



<p class="wp-block-paragraph">更隐蔽的是：如果只看 1 分钟平均 CPU 使用率，仪表盘看起来一切正常——平均值远低于 limit，但应用实际上整天都在被节流。正确的监控指标是 <code>container_cpu_cfs_throttled_periods_total</code>。</p>



<h2 class="wp-block-heading">实测数据：延迟与吞吐量</h2>



<p class="wp-block-paragraph">测试向两个服务发送相同负载：</p>



<p class="wp-block-paragraph">&#8211; <strong>慢请求变慢 2.4 倍</strong>：即使平均负载只需 320m（远低于 500m 的 limit），受限服务的慢请求延迟仍是不受限版本的 2.4 倍。
&#8211; <strong>尖峰吸收能力归零</strong>：流量突增时，受限服务在 <strong>89% 的时间窗口内处于冻结状态</strong>；无限制服务则轻松吸收了 12 倍的突发流量，零降速。
&#8211; <strong>启动时间缩短约一半</strong>：CPU 密集型的编译/初始化工作完成速度提升近一倍（具体倍数取决于服务启动阶段 I/O 占比）。</p>



<h2 class="wp-block-heading">「吵闹邻居」真的存在吗？</h2>



<p class="wp-block-paragraph">最常见的担忧是：不加限制的 Pod 会抢光整台机器的资源。测试专门验证了这个场景——在同一节点上放了一个持续吃满 CPU 的「吵闹邻居」Pod：</p>



<p class="wp-block-paragraph">&#8211; 无限制受害者的 P99 延迟变化不到 7 毫米，且从未触发节流。<strong>CPU request 本身就是保护伞</strong>——CFS 调度器按权重分配资源，空闲份额会被借走，工作一来立刻归还。
&#8211; 有 500m 限制的受害者反而被节流了 0.29% 的时间窗口，P99 延迟并未改善。</p>



<p class="wp-block-paragraph">结论很明确：<strong>限制保护不了邻居，只能伤害自己。</strong></p>



<h2 class="wp-block-heading">为什么内存限制应该保留</h2>



<p class="wp-block-paragraph">CPU 和内存有本质区别：</p>



<ul class="wp-block-list">
<li>CPU | 应用变慢，稍后补上 | <strong>去掉 limit，保留 request</strong></li>
<li>内存 | 应用直接崩溃（OOM Kill） | <strong>保留 limit</strong></li>
</ul>



<h2 class="wp-block-heading">成本影响：多数集群预留了大量闲置算力</h2>



<p class="wp-block-paragraph">测试提供了一个说明性的成本模型：去掉不必要的 CPU 限制并重新调整 request 后，<strong>单个集群每年可节省数万美元</strong>的硬件开支。大多数集群的实际 CPU 利用率长期停留在个位数或低两位数，而限制让本可借用的空闲算力白白浪费。</p>



<h2 class="wp-block-heading">正确的做法</h2>



<p class="wp-block-paragraph">1. <strong>保留 CPU request</strong>：它是真正的资源保障，也是 CFS 权重的来源。
2. <strong>去掉 CPU limit</strong>：除非使用 Guaranteed QoS + 静态 CPU Manager 绑核这一特定场景。
3. <strong>先加 LimitRange</strong>：给未显式声明 request 的 Pod 设定默认值，一条清单即可生效。
4. <strong>再补 ResourceQuota</strong>：按命名空间控制总 request 上限，守护成本而非稳定性。</p>



<p class="wp-block-paragraph"><strong>重要提醒</strong>：不能用被节流状态下测到的 CPU 用量来设定新的 limit 值——那个数字反映的是 limit 允许了多少，而不是应用真正需要多少。</p>



<p class="wp-block-paragraph">来源：GitHub 项目 k8s-cpu-limits-analyzed（inevolin）</p>

]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
