遇见pod重启_tmp.html 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>遇见pod重启.md</title>
  5. <meta http-equiv="Content-type" content="text/html;charset=UTF-8">
  6. <style>
  7. /* https://github.com/microsoft/vscode/blob/master/extensions/markdown-language-features/media/markdown.css */
  8. /*---------------------------------------------------------------------------------------------
  9. * Copyright (c) Microsoft Corporation. All rights reserved.
  10. * Licensed under the MIT License. See License.txt in the project root for license information.
  11. *--------------------------------------------------------------------------------------------*/
  12. body {
  13. font-family: var(--vscode-markdown-font-family, -apple-system, BlinkMacSystemFont, "Segoe WPC", "Segoe UI", "Ubuntu", "Droid Sans", sans-serif);
  14. font-size: var(--vscode-markdown-font-size, 14px);
  15. padding: 0 26px;
  16. line-height: var(--vscode-markdown-line-height, 22px);
  17. word-wrap: break-word;
  18. }
  19. html,footer,header{
  20. font-family: var(--vscode-markdown-font-family, -apple-system, BlinkMacSystemFont, "Segoe WPC", "Segoe UI", "Ubuntu", "Droid Sans", sans-serif);
  21. font-size: var(--vscode-markdown-font-size, 14px);
  22. }
  23. #code-csp-warning {
  24. position: fixed;
  25. top: 0;
  26. right: 0;
  27. color: white;
  28. margin: 16px;
  29. text-align: center;
  30. font-size: 12px;
  31. font-family: sans-serif;
  32. background-color:#444444;
  33. cursor: pointer;
  34. padding: 6px;
  35. box-shadow: 1px 1px 1px rgba(0,0,0,.25);
  36. }
  37. #code-csp-warning:hover {
  38. text-decoration: none;
  39. background-color:#007acc;
  40. box-shadow: 2px 2px 2px rgba(0,0,0,.25);
  41. }
  42. body.scrollBeyondLastLine {
  43. margin-bottom: calc(100vh - 22px);
  44. }
  45. body.showEditorSelection .code-line {
  46. position: relative;
  47. }
  48. body.showEditorSelection .code-active-line:before,
  49. body.showEditorSelection .code-line:hover:before {
  50. content: "";
  51. display: block;
  52. position: absolute;
  53. top: 0;
  54. left: -12px;
  55. height: 100%;
  56. }
  57. body.showEditorSelection li.code-active-line:before,
  58. body.showEditorSelection li.code-line:hover:before {
  59. left: -30px;
  60. }
  61. .vscode-light.showEditorSelection .code-active-line:before {
  62. border-left: 3px solid rgba(0, 0, 0, 0.15);
  63. }
  64. .vscode-light.showEditorSelection .code-line:hover:before {
  65. border-left: 3px solid rgba(0, 0, 0, 0.40);
  66. }
  67. .vscode-light.showEditorSelection .code-line .code-line:hover:before {
  68. border-left: none;
  69. }
  70. .vscode-dark.showEditorSelection .code-active-line:before {
  71. border-left: 3px solid rgba(255, 255, 255, 0.4);
  72. }
  73. .vscode-dark.showEditorSelection .code-line:hover:before {
  74. border-left: 3px solid rgba(255, 255, 255, 0.60);
  75. }
  76. .vscode-dark.showEditorSelection .code-line .code-line:hover:before {
  77. border-left: none;
  78. }
  79. .vscode-high-contrast.showEditorSelection .code-active-line:before {
  80. border-left: 3px solid rgba(255, 160, 0, 0.7);
  81. }
  82. .vscode-high-contrast.showEditorSelection .code-line:hover:before {
  83. border-left: 3px solid rgba(255, 160, 0, 1);
  84. }
  85. .vscode-high-contrast.showEditorSelection .code-line .code-line:hover:before {
  86. border-left: none;
  87. }
  88. img {
  89. max-width: 100%;
  90. max-height: 100%;
  91. }
  92. a {
  93. text-decoration: none;
  94. }
  95. a:hover {
  96. text-decoration: underline;
  97. }
  98. a:focus,
  99. input:focus,
  100. select:focus,
  101. textarea:focus {
  102. outline: 1px solid -webkit-focus-ring-color;
  103. outline-offset: -1px;
  104. }
  105. hr {
  106. border: 0;
  107. height: 2px;
  108. border-bottom: 2px solid;
  109. }
  110. h1 {
  111. padding-bottom: 0.3em;
  112. line-height: 1.2;
  113. border-bottom-width: 1px;
  114. border-bottom-style: solid;
  115. }
  116. h1, h2, h3 {
  117. font-weight: normal;
  118. }
  119. table {
  120. border-collapse: collapse;
  121. }
  122. table > thead > tr > th {
  123. text-align: left;
  124. border-bottom: 1px solid;
  125. }
  126. table > thead > tr > th,
  127. table > thead > tr > td,
  128. table > tbody > tr > th,
  129. table > tbody > tr > td {
  130. padding: 5px 10px;
  131. }
  132. table > tbody > tr + tr > td {
  133. border-top: 1px solid;
  134. }
  135. blockquote {
  136. margin: 0 7px 0 5px;
  137. padding: 0 16px 0 10px;
  138. border-left-width: 5px;
  139. border-left-style: solid;
  140. }
  141. code {
  142. font-family: Menlo, Monaco, Consolas, "Droid Sans Mono", "Courier New", monospace, "Droid Sans Fallback";
  143. font-size: 1em;
  144. line-height: 1.357em;
  145. }
  146. body.wordWrap pre {
  147. white-space: pre-wrap;
  148. }
  149. pre:not(.hljs),
  150. pre.hljs code > div {
  151. padding: 16px;
  152. border-radius: 3px;
  153. overflow: auto;
  154. }
  155. pre code {
  156. color: var(--vscode-editor-foreground);
  157. tab-size: 4;
  158. }
  159. /** Theming */
  160. .vscode-light pre {
  161. background-color: rgba(220, 220, 220, 0.4);
  162. }
  163. .vscode-dark pre {
  164. background-color: rgba(10, 10, 10, 0.4);
  165. }
  166. .vscode-high-contrast pre {
  167. background-color: rgb(0, 0, 0);
  168. }
  169. .vscode-high-contrast h1 {
  170. border-color: rgb(0, 0, 0);
  171. }
  172. .vscode-light table > thead > tr > th {
  173. border-color: rgba(0, 0, 0, 0.69);
  174. }
  175. .vscode-dark table > thead > tr > th {
  176. border-color: rgba(255, 255, 255, 0.69);
  177. }
  178. .vscode-light h1,
  179. .vscode-light hr,
  180. .vscode-light table > tbody > tr + tr > td {
  181. border-color: rgba(0, 0, 0, 0.18);
  182. }
  183. .vscode-dark h1,
  184. .vscode-dark hr,
  185. .vscode-dark table > tbody > tr + tr > td {
  186. border-color: rgba(255, 255, 255, 0.18);
  187. }
  188. </style>
  189. <style>
  190. /* Tomorrow Theme */
  191. /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */
  192. /* Original theme - https://github.com/chriskempson/tomorrow-theme */
  193. /* Tomorrow Comment */
  194. .hljs-comment,
  195. .hljs-quote {
  196. color: #8e908c;
  197. }
  198. /* Tomorrow Red */
  199. .hljs-variable,
  200. .hljs-template-variable,
  201. .hljs-tag,
  202. .hljs-name,
  203. .hljs-selector-id,
  204. .hljs-selector-class,
  205. .hljs-regexp,
  206. .hljs-deletion {
  207. color: #c82829;
  208. }
  209. /* Tomorrow Orange */
  210. .hljs-number,
  211. .hljs-built_in,
  212. .hljs-builtin-name,
  213. .hljs-literal,
  214. .hljs-type,
  215. .hljs-params,
  216. .hljs-meta,
  217. .hljs-link {
  218. color: #f5871f;
  219. }
  220. /* Tomorrow Yellow */
  221. .hljs-attribute {
  222. color: #eab700;
  223. }
  224. /* Tomorrow Green */
  225. .hljs-string,
  226. .hljs-symbol,
  227. .hljs-bullet,
  228. .hljs-addition {
  229. color: #718c00;
  230. }
  231. /* Tomorrow Blue */
  232. .hljs-title,
  233. .hljs-section {
  234. color: #4271ae;
  235. }
  236. /* Tomorrow Purple */
  237. .hljs-keyword,
  238. .hljs-selector-tag {
  239. color: #8959a8;
  240. }
  241. .hljs {
  242. display: block;
  243. overflow-x: auto;
  244. color: #4d4d4c;
  245. padding: 0.5em;
  246. }
  247. .hljs-emphasis {
  248. font-style: italic;
  249. }
  250. .hljs-strong {
  251. font-weight: bold;
  252. }
  253. </style>
  254. <style>
  255. /*
  256. * Custom MD PDF CSS
  257. */
  258. html,footer,header{
  259. font-family: -apple-system, BlinkMacSystemFont, "Segoe WPC", "Segoe UI", "Ubuntu", "Droid Sans", sans-serif, "Meiryo";
  260. }
  261. body {
  262. font-family: -apple-system, BlinkMacSystemFont, "Segoe WPC", "Segoe UI", "Ubuntu", "Droid Sans", sans-serif, "Meiryo";
  263. padding: 0 12px;
  264. }
  265. pre {
  266. background-color: #f8f8f8;
  267. border: 1px solid #cccccc;
  268. border-radius: 3px;
  269. overflow-x: auto;
  270. white-space: pre-wrap;
  271. overflow-wrap: break-word;
  272. }
  273. pre:not(.hljs) {
  274. padding: 23px;
  275. line-height: 19px;
  276. }
  277. blockquote {
  278. background: rgba(127, 127, 127, 0.1);
  279. border-color: rgba(0, 122, 204, 0.5);
  280. }
  281. .emoji {
  282. height: 1.4em;
  283. }
  284. code {
  285. font-size: 14px;
  286. line-height: 19px;
  287. }
  288. /* for inline code */
  289. :not(pre):not(.hljs) > code {
  290. color: #C9AE75; /* Change the old color so it seems less like an error */
  291. font-size: inherit;
  292. }
  293. /* Page Break : use <div class="page"/> to insert page break
  294. -------------------------------------------------------- */
  295. .page {
  296. page-break-after: always;
  297. }
  298. </style>
  299. <link rel="stylesheet" href="file:///Users/gamehu/Documents/new-blog/R%3A%5C2.Travail%5C1.Enseignement%5CCours%5C_1.Outils%5C2.Developpement%5C1.SCSS%5Cmain.css" type="text/css"><link rel="stylesheet" href="file:///Users/gamehu/Documents/new-blog/D%3A%5Crdaros%5CCours%5C_1.Outils%5C2.Developpement%5C1.SCSS%5Cmain.css" type="text/css">
  300. </head>
  301. <body>
  302. <h2 id="title-%E9%81%87%E8%A7%81pod%E9%87%8D%E5%90%AFauthor-gamehudate-2024-02-18-093129tags">title: 遇见pod重启<br>
  303. author: Gamehu<br>
  304. date: 2024-02-18 09:31:29<br>
  305. tags:</h2>
  306. <div class="tag-container">
  307. <span class="main-tag">&#x9047;&#x89C1;&#x7CFB;&#x5217;</span>
  308. <span class="sub-tag">&#x7B2C;&#x4E94;&#x7BC7;</span>
  309. </div>
  310. <div class="article-quote"></div>
  311. <p>现场的应用A pod一段时间就会重启,用k8s命令看pod是因为超出limits。</p>
  312. <p>查看了gc日志。因为使用的是G1回收器</p>
  313. <p>让我详细解释G1 GC的工作流程:</p>
  314. <p>内存分区:</p>
  315. <p>整个堆内存被划分为大小相等的Region(默认2048个)<br>
  316. Region大小是2的幂次方,范围从1MB到32MB<br>
  317. 每个Region可以是Eden、Survivor、Old或Humongous区<br>
  318. Humongous区专门用于存储大于Region大小一半的对象</p>
  319. <p>GC周期的四个主要阶段:</p>
  320. <p>a) 初始标记(Initial Mark)- STW:</p>
  321. <p>标记所有直接从GC Roots可达的对象<br>
  322. 这个阶段需要Stop-The-World(STW)<br>
  323. 通常和年轻代收集同时进行<br>
  324. 时间很短</p>
  325. <p>b) 并发标记(Concurrent Mark):</p>
  326. <p>遍历整个堆的对象图<br>
  327. 标记所有可达的对象<br>
  328. 与应用程序并发执行<br>
  329. 使用SATB(Snapshot-At-The-Beginning)算法<br>
  330. 记录标记期间的引用变化</p>
  331. <p>c) 最终标记(Final Mark)- STW:</p>
  332. <p>处理并发标记阶段遗留的SATB缓冲区<br>
  333. 完成最终的标记工作<br>
  334. 需要STW,但时间较短</p>
  335. <p>d) 筛选回收(Live Data Counting and Evacuation)- STW:</p>
  336. <p>计算各个Region的垃圾比例<br>
  337. 根据用户期望的停顿时间建立回收集合<br>
  338. 优先回收价值最大的Region(垃圾最多)<br>
  339. 将存活对象复制到新的Region<br>
  340. 清空旧Region</p>
  341. <p>特殊处理:</p>
  342. <p>a) 年轻代收集:</p>
  343. <p>当Eden区满时触发<br>
  344. 只关注年轻代Region<br>
  345. 存活对象复制到Survivor区或老年代</p>
  346. <p>b) 混合收集:</p>
  347. <p>同时回收年轻代和部分老年代Region<br>
  348. 根据全局并发标记的结果<br>
  349. 老年代Region按垃圾收集价值排序</p>
  350. <p>优化机制:</p>
  351. <p>a) Remembered Sets(Rsets):</p>
  352. <p>记录跨Region的引用关系<br>
  353. 每个Region都有一个RSet<br>
  354. 避免全堆扫描</p>
  355. <p>b) Collection Sets(CSets):</p>
  356. <p>需要被回收的Region集合<br>
  357. 基于垃圾占比和期望停顿时间选择</p>
  358. <p>正常GC流程:</p>
  359. <p>Young GC:回收年轻代Region<br>
  360. 并发标记周期:标记整个堆的存活对象<br>
  361. 混合回收:回收年轻代和部分老年代Region</p>
  362. <p>Full GC触发条件:</p>
  363. <p>并发标记完成之前就出现内存分配失败<br>
  364. 回收后的空间仍不足以支持下一次Young GC(空间担保失败)<br>
  365. 混合回收后仍无法满足内存需求<br>
  366. Humongous对象分配失败</p>
  367. <p>Full GC的特点:</p>
  368. <p>必须Stop-The-World(STW)<br>
  369. 对整个堆进行压缩和整理<br>
  370. 单线程执行,停顿时间长<br>
  371. 会明显影响应用程序性能</p>
  372. <p>Full GC后的处理:</p>
  373. <p>如果Full GC后内存足够,应用继续运行<br>
  374. 如果Full GC后内存仍然不足,抛出OutOfMemoryError</p>
  375. <p>避免Full GC的建议:</p>
  376. <p>合理设置堆内存大小<br>
  377. 调整并发标记的触发阈值<br>
  378. 适当调整Region大小<br>
  379. 控制大对象的产生<br>
  380. 及时进行并发标记,避免内存耗尽</p>
  381. <p>Full GC在G1中的具体执行步骤:</p>
  382. <ol>
  383. <li>标记阶段(Marking Phase):</li>
  384. </ol>
  385. <ul>
  386. <li>进入STW阶段,停止所有用户线程</li>
  387. <li>从GC Roots开始进行全堆标记</li>
  388. <li>标记所有存活对象</li>
  389. <li>使用单线程进行标记,效率较低</li>
  390. </ul>
  391. <ol start="2">
  392. <li>清理阶段(Cleanup Phase):</li>
  393. </ol>
  394. <ul>
  395. <li>清理所有未被标记的对象(垃圾对象)</li>
  396. <li>回收空的Region</li>
  397. <li>重置各种元数据信息(RSet等)</li>
  398. <li>计算所有Region的存活对象信息</li>
  399. </ul>
  400. <ol start="3">
  401. <li>压缩阶段(Compaction Phase):</li>
  402. </ol>
  403. <ul>
  404. <li>对存活对象进行压缩整理</li>
  405. <li>将存活对象复制到新的Region</li>
  406. <li>按照新的分代布局重新整理对象</li>
  407. <li>更新对象引用关系</li>
  408. <li>释放旧的Region</li>
  409. <li>重建RSet等辅助数据结构</li>
  410. </ul>
  411. <p>特点:</p>
  412. <ul>
  413. <li>整个过程完全STW</li>
  414. <li>单线程执行,性能较差</li>
  415. <li>会对整个堆内存进行处理</li>
  416. <li>会导致较长时间的停顿</li>
  417. <li>会破坏原有的分代结构,需要重新构建</li>
  418. </ul>
  419. <p>触发Full GC通常意味着:</p>
  420. <ul>
  421. <li>内存分配压力过大</li>
  422. <li>并发收集来不及回收内存</li>
  423. <li>可能需要调整GC参数或应用程序代码</li>
  424. </ul>
  425. </body>
  426. </html>