<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" 
  xmlns:content="http://purl.org/rss/1.0/modules/content/" 
  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:media="http://search.yahoo.com/mrss/">
  <channel>
    <title>Mark 的滿紙方糖言</title>
    <link>https://blog.mygraphql.com/zh/notes/</link>
    <description>Recent content on Mark 的滿紙方糖言</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>zh</language>
    <managingEditor>labile.zhu@gmail.com (Mark Zhu)</managingEditor>
    <webMaster>labile.zhu@gmail.com (Mark Zhu)</webMaster>
    <copyright>Mark Zhu ©2026, All Rights Reserved</copyright>
    <lastBuildDate>Sat, 02 May 2026 23:12:15 +0800</lastBuildDate>
    
        <atom:link href="https://blog.mygraphql.com/zh/notes/index.xml" rel="self" type="application/rss+xml" />
    

      
      <item>
        <title>家中杂物管理术 - 不断不舍不离 Homebox</title>
        <link>https://blog.mygraphql.com/zh/notes/lifehacker/homebox/</link>
        <pubDate>Tue, 20 Jan 2026 08:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Tue, 20 Jan 2026 08:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/lifehacker/homebox/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/lifehacker/homebox/index.assets/logo.png&#34; alt=&#34;ogo&#34;&gt;&lt;/p&gt;
&lt;p&gt;本文分享如何通过 Homebox —— 一个自托管的家庭物品管理系统，重新整理我的 “杂物生活”，节省时间、减少焦虑，并让全家人都受益。如果你的第一反应是 “就家里那点东西要上系统，至于吗？” 那证明你是个正常人，我以前也是这样的反应。作为一名技术爱好者，我曾长期被家中不断增长的电子设备和零部件小工具所困扰。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>self-hosting</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>智能家居集成 AI Agent - agentgateway 与 tracing 实验</title>
        <link>https://blog.mygraphql.com/zh/notes/lifehacker/agentic-home-assistant/</link>
        <pubDate>Fri, 12 Dec 2025 08:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Fri, 12 Dec 2025 08:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/lifehacker/agentic-home-assistant/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/lifehacker/agentic-home-assistant/index.assets/1-The-Future-of-AI-Home-Assistants-Smart-Living-with-Voice-and-Automation.jpg&#34; alt=&#34;logo&#34;&gt;&lt;/p&gt;
&lt;p&gt;内容简介：介绍用 AI Agent 控制智能电器的一次实验。尝试通过 agentgateway 代理所有 LLM 与 MCP 流量，实现集中认证、配置、tracing。&lt;/p&gt;
&lt;h2 id=&#34;缘起&#34;&gt;缘起&lt;/h2&gt;
&lt;p&gt;基于上期的 &lt;a href=&#34;https://blog.mygraphql.com/zh/notes/lifehacker/home-assistant/&#34;&gt;HA + 小米智能家居 = 失业宅心灵鸡汤&lt;/a&gt;  基础上。我想试试：&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>smart-home</category>
            
          
            
              <category>self-hosting</category>
            
          
            
              <category>life-hacker</category>
            
          
            
              <category>home-assistant</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>HA &#43; 小米智能家居 = 失业宅心灵鸡汤</title>
        <link>https://blog.mygraphql.com/zh/notes/lifehacker/home-assistant/</link>
        <pubDate>Fri, 05 Dec 2025 08:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Fri, 05 Dec 2025 08:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/lifehacker/home-assistant/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/lifehacker/home-assistant/index.assets/logo.png&#34; alt=&#34;logo&#34;&gt;&lt;/p&gt;
&lt;p&gt;本文介绍如何使用 Home Assistant (HA) 集成小米米家智能家居设备，实现基于 Prometheus Alertmanager 的自动化米家开关控制。并结合 HomeKit Bridge，实现 iPhone 位置感知驱动的自动化。&lt;/p&gt;
&lt;h2 id=&#34;缘起&#34;&gt;缘起&lt;/h2&gt;
&lt;p&gt;缘起：这节写得有点冗长，不喜可跳过。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>smart-home</category>
            
          
            
              <category>xiaomi</category>
            
          
            
              <category>self-hosting</category>
            
          
            
              <category>life-hacker</category>
            
          
            
              <category>home-assistant</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Self-hosted - 数字世代的归园田居</title>
        <link>https://blog.mygraphql.com/zh/notes/lifehacker/self-hosted-lifestyle/</link>
        <pubDate>Thu, 20 Nov 2025 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Thu, 20 Nov 2025 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/lifehacker/self-hosted-lifestyle/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/lifehacker/self-hosted-lifestyle/index.assets/pi-stack.png&#34; alt=&#34;image-20251112173150998&#34;&gt;&lt;/p&gt;
&lt;p&gt;无论是否愿意，我们大概已经离不开生活的数码化了。想想每天拍多少照片，多少微信消息，多少娱乐媒体，多少社交信息，多少数字化记录的知识或事项。&lt;/p&gt;
&lt;p&gt;如果说 &lt;code&gt;陶渊明&lt;/code&gt;的&lt;code&gt;归园田居&lt;/code&gt;是东晋末年离开繁华喧嚣的生活态度，那么 Self-hosted 大概是数字时代里，远离公有云和现代互联网喧嚣、逃离各种有理或无理的数据监控和广告驱动的一种生活态度。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>self-hosting</category>
            
          
            
              <category>life-hacker</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>那个算法尚未统治的时代：90 年代的互联网</title>
        <link>https://blog.mygraphql.com/zh/notes/wu/old-school/old-school-internet/</link>
        <pubDate>Sun, 10 Aug 2025 01:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sun, 10 Aug 2025 01:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/wu/old-school/old-school-internet/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/wu/old-school/old-school-internet/index.assets/logo.png&#34; alt=&#34;image-20250810162604476&#34;&gt;&lt;/p&gt;
&lt;p&gt;人老了，就喜欢偶尔怀旧。把现在和过去作种种或片面，或全面，或主观或客观的对比。以前人们是在村口那棵老榕树下谈论天下大事，指点江山。现在大概是在微信群、朋友圈上高谈宽论。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>wu</category>
            
          
            
              <category>old-school</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>自家寶藏 - 待业程序员的禪思</title>
        <link>https://blog.mygraphql.com/zh/notes/zen/the-treasure-within-oneself/</link>
        <pubDate>Fri, 06 Jun 2025 03:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Fri, 06 Jun 2025 03:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/zen/the-treasure-within-oneself/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/zen/the-treasure-within-oneself/index.assets/logo.png&#34; alt=&#34;logo&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;缘起&#34;&gt;缘起&lt;/h2&gt;
&lt;p&gt;这段时间在准备离开工作 7 年的公司了。对于一个中年的程序员，要再次步入久违非舒适区，选择未来的路似乎不像以前那么直接与简单了。IT 技术的路好像已经越走越窄了，而离开 IT 这个选项又等于离开一个已经生活 20 年的圈子，投入一个未知的世界。作为一个小时候种过十多年地的真耕学农民，回归是一个选项吗？或者《光輝歲月》这歌中已经回答了：&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>zen</category>
            
          
            
              <category>wu</category>
            
          
            
              <category>philosophy</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Self-hosted 雜碎 2025</title>
        <link>https://blog.mygraphql.com/zh/notes/lifehacker/self-hosted-hobby/</link>
        <pubDate>Sun, 02 Feb 2025 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sun, 02 Feb 2025 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/lifehacker/self-hosted-hobby/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/lifehacker/self-hosted-hobby/index.assets/logo-photo.png&#34; alt=&#34;logo&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;引&#34;&gt;引&lt;/h2&gt;
&lt;p&gt;不知不觉，已经在现在工作的公司度过了 6 年。回望一下， 6 年前入职时的光景好像还在眼前。在离开前，或者适合回顾和思考这段时间的经历。工作上应用的技术一直在这个博客上更新，已经没什么好补充的了。不如写写这 6 年和之前工作的 14 年的区别，说一些好玩的事。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>self-hosting</category>
            
          
            
              <category>life-hacker</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>2024 年 Music/Spotify 回顾</title>
        <link>https://blog.mygraphql.com/zh/notes/wu/music/2024-music-wrapped/</link>
        <pubDate>Sun, 08 Dec 2024 03:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sun, 08 Dec 2024 03:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/wu/music/2024-music-wrapped/</guid>
        <description>&lt;p&gt;2024 年快要成为过去。2024 年初，我写了《&lt;a href=&#34;https://blog.mygraphql.com/zh/posts/wrap-up/2023-wrap-up/&#34;&gt;2024, live like Sisyphus&lt;/a&gt;》 ，不知道是不是 &lt;code&gt;墨菲定律(Murphy&#39;s Law)&lt;/code&gt; 生效，还是自己预感正确，这大概是我近 20 年来最艰难的一年了。还好，有很多有心人，和有声与无声的书本、音乐陪伴我。我这几年一直用 Spotify 来听音乐和 podcast 。前几天，它像以往一样，推送给我 2024 年的音乐回顾。看到这些统计，我是有点触动的。有的事情自己或许猜到大概，但数据说出来的，往往比估计与猜想来得更真实。或者有句话没错：&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>wu</category>
            
          
            
              <category>music</category>
            
          
            
              <category>song</category>
            
          
            
              <category>wrap-up</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>可能是最深入全面的图解 Java Virtual Threads</title>
        <link>https://blog.mygraphql.com/zh/notes/java/virtual-threads-jvm-insider-2024-11-17/</link>
        <pubDate>Sun, 17 Nov 2024 08:47:11 +0100</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sun, 17 Nov 2024 08:47:11 +0100</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/java/virtual-threads-jvm-insider-2024-11-17/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;../jni-junior/index.assets/book-cover-mockup.jpg&#34; alt=&#34;logo&#34;&gt;&lt;/p&gt;
&lt;p&gt;本文尽我所能，用了数月时间，在学习了 Java Virtual Theads 的一些设计和实现理念后，用我所能的精炼文字和画图，去记录我的所学。是我现在能找到的最深入全面的图解 Java Virtual Threads 文章。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>java</category>
            
          
            
              <category>jvm-insider</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Java 如何使用 Linux 内存 -《面向技术宅的 JVM 内幕》</title>
        <link>https://blog.mygraphql.com/zh/notes/java/mmap-jvm-insider-2024-11-01/</link>
        <pubDate>Fri, 01 Nov 2024 08:47:11 +0100</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Fri, 01 Nov 2024 08:47:11 +0100</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/java/mmap-jvm-insider-2024-11-01/</guid>
        <description>&lt;p&gt;为了更高的性能、更高的内存利用率、更可靠的异常溢出保护机制，Java 重度重用了 Linux 的内存区 MMap 机制。k8s 容器环境下，内存使用预估也依赖于对它的理解。本文主讲 Java 的内存分区机制。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>java</category>
            
          
            
              <category>jvm-insider</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Java Safepoint/Handshake 全面剖析 -《面向技术宅的 JVM 内幕》</title>
        <link>https://blog.mygraphql.com/zh/notes/java/safepoint-collaboration-diagrams-jvm-insider-2024-10-28/</link>
        <pubDate>Tue, 29 Oct 2024 08:47:11 +0100</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Tue, 29 Oct 2024 08:47:11 +0100</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/java/safepoint-collaboration-diagrams-jvm-insider-2024-10-28/</guid>
        <description>&lt;p&gt;花数月时间，精心制作完成了&lt;a href=&#34;https://jvm-insider.mygraphql.com/&#34;&gt;《面向技术宅的 JVM 内幕》&lt;/a&gt;的 Safepoint 与 Threads Handshake 两节内容。是我现在能找到的全网最完整细致的 Safepoint 原理与实现分析。以下是节选内容。原文见：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://jvm-insider.mygraphql.com/zh-cn/latest/exec-engine/safepoint/safepoint.html&#34;&gt;Safepoint&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://jvm-insider.mygraphql.com/zh-cn/latest/exec-engine/safepoint/threads-handshake.html&#34;&gt;Threads Handshake&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;../jni-junior/index.assets/book-cover-mockup.jpg&#34; alt=&#34;logo&#34;&gt;&lt;/p&gt;
&lt;p&gt;可以这么说，我之前和大分部 Java 程序员，从 2014 年 Java 8 起，就很少再积极跟进 Java 底层的新技术了。原因无非几个：&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>java</category>
            
          
            
              <category>jvm-insider</category>
            
          
            
              <category>safepoint</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>从 JVM 学习路书 到 开源的酒神精神</title>
        <link>https://blog.mygraphql.com/zh/notes/java/jvm-study-road-map/</link>
        <pubDate>Sun, 20 Oct 2024 08:47:11 +0100</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sun, 20 Oct 2024 08:47:11 +0100</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/java/jvm-study-road-map/</guid>
        <description>&lt;blockquote&gt;
&lt;p&gt;内容概述：从 JVM 学习路书 说到 钻研开源的酒神精神。顺带说说 &lt;a href=&#34;https://jvm-insider.mygraphql.com/&#34;&gt;《面向技术宅的 JVM 内幕》&lt;/a&gt; 的更新内容。摘自我的开源书&lt;a href=&#34;https://jvm-insider.mygraphql.com/&#34;&gt;《面向技术宅的 JVM 内幕》&lt;/a&gt; 中 &lt;a href=&#34;https://jvm-insider.mygraphql.com/zh-cn/latest/road-map/road-map.html&#34;&gt;JVM 学习路书&lt;/a&gt; 一节。建议用电脑或平板阅读本书原文，排版、图片、结构、整体阅读体验更友好。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>java</category>
            
          
            
              <category>jvm-insider</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Java Safepoint/Handshake 剖析求证 - JVM 必要之恶 - TL²;DR</title>
        <link>https://blog.mygraphql.com/zh/notes/java/safepoint-jvm-insider/</link>
        <pubDate>Sat, 12 Oct 2024 08:47:11 +0100</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sat, 12 Oct 2024 08:47:11 +0100</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/java/safepoint-jvm-insider/</guid>
        <description>&lt;p&gt;内容概述：Java Safepoint/Handshake 设计、实现原理剖析与求证 - 摘自我的开源书&lt;a href=&#34;https://jvm-insider.mygraphql.com/&#34;&gt;《面向技术宅的 JVM 内幕》&lt;/a&gt; 中 &lt;a href=&#34;https://jvm-insider.mygraphql.com/zh-cn/latest/exec-engine/safepoint/safepoint.html&#34;&gt;Safepoint&lt;/a&gt; 一节。本文是摘录整合文章。建议用电脑或平板阅读本书原文，排版、图片、结构、整体阅读体验更友好。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>java</category>
            
          
            
              <category>jvm-insider在</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>JVM 剖析² 二次方 - Serviceability Agent</title>
        <link>https://blog.mygraphql.com/zh/notes/java/serviceability-agent/</link>
        <pubDate>Thu, 03 Oct 2024 08:47:11 +0100</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Thu, 03 Oct 2024 08:47:11 +0100</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/java/serviceability-agent/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;../jni-junior/index.assets/book-cover-mockup.jpg&#34; alt=&#34;logo&#34;&gt;&lt;/p&gt;
&lt;h1 id=&#34;serviceability-agent&#34;&gt;Serviceability Agent&lt;/h1&gt;
&lt;p&gt;&lt;code&gt;Serviceability Agent(SA)&lt;/code&gt; 原是 HotSpot 原码库中的 Sun 私有组件，由 HotSpot 工程师开发，用于协助调试 HotSpot OpenJDK。他们随后意识到 SA 可用于支持用户编写 serviceability tools ，因为它可以在运行中的进程以及 Core Dump 文件中检视 Java 对象以及 HotSpot 数据结构。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>java</category>
            
          
            
              <category>jvm-insider</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>JVM 堆栈内存剖析 - 《面向技术宅的 JVM 内幕》</title>
        <link>https://blog.mygraphql.com/zh/notes/java/stack-mem-anatomy/</link>
        <pubDate>Sat, 31 Aug 2024 08:47:11 +0100</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sat, 31 Aug 2024 08:47:11 +0100</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/java/stack-mem-anatomy/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;../jni-junior/index.assets/book-cover-mockup.jpg&#34; alt=&#34;logo&#34;&gt;&lt;/p&gt;
&lt;p&gt;由于堆栈是线程运行的 context，是运行引擎的热点核心数据。线程想触达到其它的在 heap 中的对象，几乎都要以这个 context 为根，去多次寻址才能触达 heap 中的目标数据 。可以说，这个 context 就是串联各功能模块的中心，用它可以找到上级函数返回点、入参、本函数的本地变量……了解堆栈上保存了什么数据，怎样保存数据，对了解 JVM 运行引擎、JIT编译、GC 等等功能面有重要的串接作用。就可能知道功能面之间是如何耦合、协作，完成 JVM 的完整功能。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>java</category>
            
          
            
              <category>jvm-insider</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>无处不在的 JNI - 《面向技术宅的 JVM 内幕》</title>
        <link>https://blog.mygraphql.com/zh/notes/java/jni-junior/</link>
        <pubDate>Sat, 31 Aug 2024 08:47:11 +0100</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sat, 31 Aug 2024 08:47:11 +0100</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/java/jni-junior/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/java/jni-junior/index.assets/book-cover-mockup.jpg&#34; alt=&#34;image-20240902230442134&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;面向技术宅的-jvm-内幕&#34;&gt;《面向技术宅的 JVM 内幕》&lt;/h2&gt;
&lt;p&gt;不知不觉，以 Java 程序员的名义在职场混了 20 有余个年头。年纪渐长，就养成了一个年轻人最讨厌的毛病：总喜欢回望过去。我一直写书和博客，都在思考一个问题。我为什么，为谁在写东西？ 总的回答是，我想留下和分享点东西，意义在于留下和分享的过程。读者当然越多越好，但从不为读者多少而主导自己的写作范围。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>java</category>
            
          
            
              <category>jvm-insider</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>一个IP包的旅行 —— K8s 网络之 Calico 浅度解构</title>
        <link>https://blog.mygraphql.com/zh/notes/cloud/calico/</link>
        <pubDate>Sun, 28 Jul 2024 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sun, 28 Jul 2024 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/cloud/calico/</guid>
        <description>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;学习 Kubernetes 就像玩动作游戏，当我高高兴兴地打败了一关的 BOSS 后总以为是大结局了，谁知道后面还有更大的BOSS 出现。 当我以为学习完容器化、Linux cgoup / namespace / docker 后，就可以大结局了，谁知道后面还有 CNI。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>cloudnative</category>
            
          
            
              <category>cni</category>
            
          
            
              <category>calico</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Linux: 一切皆文件; peekfd: 偷看一切文件读写</title>
        <link>https://blog.mygraphql.com/zh/notes/low-tec/trace/peekfd/</link>
        <pubDate>Sat, 06 Jul 2024 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sat, 06 Jul 2024 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/low-tec/trace/peekfd/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/low-tec/trace/peekfd/index.assets/logo.jpeg&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;引&#34;&gt;引&lt;/h2&gt;
&lt;h3 id=&#34;内容简介&#34;&gt;内容简介&lt;/h3&gt;
&lt;p&gt;Linux 大部分数据流动，包括进程间通讯，socket…… 均通过文件描述符(fd) 读写实现。在 troubleshooting 时，如果可以偷看到 fd 的流量，那么很多问题可以加速证明/证伪。本文介绍一个老工具 peekfd ，可以在一定环境中完成这个任务。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>inter-process</category>
            
          
            
              <category>fd</category>
            
          
            
              <category>trace</category>
            
          
            
              <category>ptrace</category>
            
          
            
              <category>low-tec</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>小编码，我输给 AI 了 —— 简记一次父子进程互锁的坑，自己挖的</title>
        <link>https://blog.mygraphql.com/zh/notes/low-tec/inter-process/child-process-wait-die-lock/</link>
        <pubDate>Fri, 05 Jul 2024 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Fri, 05 Jul 2024 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/low-tec/inter-process/child-process-wait-die-lock/</guid>
        <description>&lt;h2 id=&#34;简述&#34;&gt;简述&lt;/h2&gt;
&lt;p&gt;最近自己挖了一个：父子进程互锁的坑，真是应了一句话：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Debugging is like being the detective in a crime movie where you are also the murderer.&lt;/p&gt;
&lt;p&gt;- Filipe Fortes&lt;br /&gt;
调试就像是犯罪电影中的侦探，而你也是凶手。&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;先说结论吧：可能真是太久没认真写代码了，犯了个低级错误：&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>inter-process</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>码农幽默英语排行榜 S1E2</title>
        <link>https://blog.mygraphql.com/zh/notes/my-english/it-fun-english/fun-english-s1e2/</link>
        <pubDate>Thu, 04 Jul 2024 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Thu, 04 Jul 2024 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/my-english/it-fun-english/fun-english-s1e2/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/my-english/it-fun-english/fun-english-s1e2/index.assets/somoking-man.png&#34; alt=&#34;Smoke it like Norman Rockwell&#34;&gt;&lt;br /&gt;
&lt;em&gt;Source: Norman Rockwell&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“there is only one true heroism in the world: to see the world as it is, and to love it” ― Roman Rolland&lt;/p&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;「世上只有一種英雄主義，就是在認清生活真相以後，依然熱愛生活。」 — 羅曼．羅蘭&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>english</category>
            
          
            
              <category>fun-english</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>再別科橋 诗两首</title>
        <link>https://blog.mygraphql.com/zh/notes/wu/bye2-keyun-qiao/</link>
        <pubDate>Wed, 03 Jul 2024 03:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Wed, 03 Jul 2024 03:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/wu/bye2-keyun-qiao/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/wu/bye2-keyun-qiao/index.assets/guangzhou-ta-lache.jpg&#34; alt=&#34;广州塔下拉斗车&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;广州塔下搬砖望帝景&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;source: 上图来源已经标注&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&#34;再別科橋&#34;&gt;再別科橋&lt;/h2&gt;
&lt;p&gt;悄悄地我走了，&lt;br /&gt;
正如我悄悄地來；&lt;br /&gt;
我最後發了個 farewell，&lt;br /&gt;
作別當天的戰友。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>poem</category>
            
          
            
              <category>wu</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>C&#43;&#43; 项目构建工具 Bazel 学习笔记</title>
        <link>https://blog.mygraphql.com/zh/notes/cc/bazel/</link>
        <pubDate>Sun, 30 Jun 2024 03:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sun, 30 Jun 2024 03:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/cc/bazel/</guid>
        <description>&lt;h2 id=&#34;bazel-概念与对象&#34;&gt;Bazel 概念与对象&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/cc/bazel/bazel-overview.drawio.svg&#34; alt=&#34;bazel-overview.drawio.svg&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;a href=&#34;https://app.diagrams.net/?ui=sketch#Uhttps%3A%2F%2Fblog.mygraphql.com%2Fzh%2Fnotes%2Fcc%2Fbazel%2Fbazel-overview.drawio.svg&#34;&gt;用 Draw.io 打开 bazel-overview.drawio.svg&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/cc/bazel/bazel-concept.drawio.svg&#34; alt=&#34;bazel-concept.drawio.svg&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;a href=&#34;https://app.diagrams.net/?ui=sketch#Uhttps%3A%2F%2Fblog.mygraphql.com%2Fzh%2Fnotes%2Fcc%2Fbazel%2Fbazel-concept.drawio.svg&#34;&gt;用 Draw.io 打开 bazel-concept.drawio.svg&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/cc/bazel/bazel-external-dep.drawio.svg&#34; alt=&#34;bazel-external-dep.drawio.svg&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;a href=&#34;https://app.diagrams.net/?ui=sketch#Uhttps%3A%2F%2Fblog.mygraphql.com%2Fzh%2Fnotes%2Fcc%2Fbazel%2Fbazel-external-dep.drawio.svg&#34;&gt;用 Draw.io 打开 bazel-external-dep.drawio.svg&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&#34;cpp--use-cases&#34;&gt;CPP  use cases&lt;/h2&gt;
&lt;h3 id=&#34;adding-include-paths&#34;&gt;Adding include paths&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://bazel.build/tutorials/cpp-use-cases#add-include-paths&#34;&gt;https://bazel.build/tutorials/cpp-use-cases#add-include-paths&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Sometimes you cannot (or do not want to) root include paths at the workspace root. Existing libraries might already have an include directory that doesn&amp;rsquo;t match its path in your workspace. For example, suppose you have the following directory structure:&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>C&#43;&#43;</category>
            
          
            
              <category>build</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>我的智能家居设计 —— 说说好像过时的 IOT</title>
        <link>https://blog.mygraphql.com/zh/notes/lifehacker/smart-home/</link>
        <pubDate>Wed, 12 Jun 2024 08:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Wed, 12 Jun 2024 08:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/lifehacker/smart-home/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/lifehacker/smart-home/index.assets/logo.png&#34; alt=&#34;image-20240613232331417&#34;&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;首先声明一下，我写这篇文章时，小米没给我钱。当然如果后来雷军想给我钱，那么就是后话了。毕竟嘛…… 我爱 RMB。我不是米粉。在 1994 年左右，当时作为小学生的我，也曾是 DOS 下的 WPS 粉。当时 WPS 有一个通用密码 Ctrl-QIUBOJUN ，所以严格来说，我曾是金山粉，或者雷军他前老板求伯君粉，或者叫“金”粉 ？&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>life-hacker</category>
            
          
            
              <category>smart-home</category>
            
          
            
              <category>xiaomi</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>我的个人知识库的构建 － Stop 404</title>
        <link>https://blog.mygraphql.com/zh/notes/lifehacker/personal-knowledge-base/</link>
        <pubDate>Tue, 11 Jun 2024 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Tue, 11 Jun 2024 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/lifehacker/personal-knowledge-base/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/lifehacker/personal-knowledge-base/index.assets/hitler-nietzsche.jpeg&#34; alt=&#34;Adolf Hitler viewing the bust of Friedrich Nietzsche in 1931&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Adolf Hitler viewing the bust of Friedrich Nietzsche in 1931 © Fotoarchiv Hoffman&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;码农之路一走就是二十年了。前十五年应了陶渊明的一句话：＂&lt;strong&gt;人生无根蒂，飘如陌上尘&lt;/strong&gt;＂，每换一家公司或项目，技术栈也会跟着或多或少地改变。这种状态很难积累到什么有竞争力的技术，有时候幸运可以积累点，有限的大脑内存也因时间和需要腾出空间存放新知识而忘记。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>self-hosting</category>
            
          
            
              <category>life-hacker</category>
            
          
            
              <category>learning</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>True world?</title>
        <link>https://blog.mygraphql.com/zh/notes/wu/fake-world-story/</link>
        <pubDate>Wed, 10 Apr 2024 03:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Wed, 10 Apr 2024 03:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/wu/fake-world-story/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/wu/fake-world-story/index.assets/happiness-mouse-on-metro.png&#34; alt=&#34;image-20240410220507758&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Image from [Happiness short movie - Steve Cutts]&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Disclaimer: 本故事纯属虚构，如有雷同，实属不幸&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;在 Long long ago，有个叫 CanTon City 的城市。故事的主角，叫 Mickey，他住在离 CanTon City 30 公里远的 FoSame City。这是一个平凡的上班日，拥挤的地铁车厢里，我们的主角 Mickey 站立着，左右两边和背面都被人顶得严实。耳边传来的不是 TikTok 剧场的声音，就是旁边一群貌似退休者在兴奋地讨论下个景点去哪里，还有讨论朋友圈发的那朵木棉花没对好焦，大概是镜头买了旧款，光圈不足……偶尔还可以嗅到一些不知从哪儿来的气味。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>wu</category>
            
          
            
              <category>philosophy</category>
            
          
            
              <category>story</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>借一次家庭局域网互联探索 - 谈谈互联网原义</title>
        <link>https://blog.mygraphql.com/zh/notes/lifehacker/home-lans-bridge/</link>
        <pubDate>Sun, 10 Mar 2024 01:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sun, 10 Mar 2024 01:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/lifehacker/home-lans-bridge/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/lifehacker/home-lans-bridge/index.assets/logo.png&#34; alt=&#34;image-20240310143521710&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;图：广州艺术博物馆顶。拍摄于 2024年 2 月&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&#34;引&#34;&gt;引&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;对于大牛，这段内容有点哆嗦唠叨，毕竟读者想看的或者就是个配网方法，而作者想写的竟然是 Internet 历史，不喜可跳过。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>self-hosting</category>
            
          
            
              <category>life-hacker</category>
            
          
            
              <category>lan</category>
            
          
            
              <category>lab</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Linux 下巨量窗口快速查找切换工具 Rofi —— 键盘总比眼睛快</title>
        <link>https://blog.mygraphql.com/zh/notes/lifehacker/linux-window-switcher-rofi/</link>
        <pubDate>Sat, 07 Oct 2023 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sat, 07 Oct 2023 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/lifehacker/linux-window-switcher-rofi/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/lifehacker/linux-window-switcher-rofi/index.assets/logo.png&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;图源：&lt;a href=&#34;https://rambox.medium.com/how-to-organize-your-windows-desktop-5153918dd97&#34;&gt;How to organize your Windows desktop&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&#34;引&#34;&gt;引&lt;/h2&gt;
&lt;p&gt;窗口切换是程序员的高频操作，而在今天大屏和巨量窗口环境中，眼和手都不堪重负。如何让心流不被找窗口打断？如果有个工具，只需要输入窗口名关键字就可以完成切换，该多好。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>life-hacker</category>
            
          
            
              <category>desktop</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>误落尘网中，一去三十年</title>
        <link>https://blog.mygraphql.com/zh/notes/wu/career/40s-job-seeking/</link>
        <pubDate>Fri, 29 Sep 2023 10:00:00 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Fri, 29 Sep 2023 10:00:00 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/wu/career/40s-job-seeking/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/wu/career/40s-job-seeking/index.assets/logo.png&#34; alt=&#34;image-20251108160253250&#34;&gt;&lt;/p&gt;
&lt;p&gt;从 2025 年6月底失业到现在(2025 年 11 月)，大概 5 个月的时间，经历了不少的事情，一直想记录下来; 但又苦于没想出什么可以提炼出来的感悟，所以一直都没有开始写。毕竟，写一篇吐苦水式的伤痕文学大概没多少人想看，自己写着也乏味。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>career</category>
            
          
            
              <category>wu</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>写在第 20 多次面试后</title>
        <link>https://blog.mygraphql.com/zh/notes/wu/career/40s-30th-interview/</link>
        <pubDate>Fri, 29 Sep 2023 10:00:00 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Fri, 29 Sep 2023 10:00:00 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/wu/career/40s-30th-interview/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/wu/career/40s-30th-interview/index.assets/maxresdefault.jpg&#34; alt=&#34;maxresdefault&#34;&gt;&lt;/p&gt;
&lt;p&gt;上个月完成了一个职位的最后一轮面试，一周过去，悄无声息。暗自数了一下，大概已经是失业后的第 20 多次面试了。如何表达现在的感受呢？是绝望吗？好像不至于。是失望吗？的确有些。或许，是时候回顾经历，修正一下方向和方法了。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>career</category>
            
          
            
              <category>wu</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>eBPF 求证坊间传闻：Java GC 日志可导致整个 JVM 服务卡顿？</title>
        <link>https://blog.mygraphql.com/zh/notes/java/java-gc-log-stuck/</link>
        <pubDate>Sat, 23 Sep 2023 03:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sat, 23 Sep 2023 03:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/java/java-gc-log-stuck/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/java/java-gc-log-stuck/index.assets/logo.png&#34; alt=&#34;image-20230924103632524&#34;&gt;&lt;/p&gt;
&lt;p&gt;[TOC]&lt;/p&gt;
&lt;h2 id=&#34;概述&#34;&gt;概述&lt;/h2&gt;
&lt;p&gt;实现世界的 Java 应用，都会记录 GC 日志。但不是所有人都知道小小的日志可能导致整个 JVM 服务卡顿。本文尝试用 eBPF 等分析方法，去证明具体环境下，问题的存在与否。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>java</category>
            
          
            
              <category>jvm</category>
            
          
            
              <category>gc</category>
            
          
            
              <category>kernel</category>
            
          
            
              <category>io</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>eBPF 求证坊间传闻：mmap &#43; Java Safepoint 可导致整个 JVM 服务卡顿？</title>
        <link>https://blog.mygraphql.com/zh/notes/java/java-reach-safepoint-stalled/</link>
        <pubDate>Sat, 23 Sep 2023 03:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sat, 23 Sep 2023 03:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/java/java-reach-safepoint-stalled/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/java/java-reach-safepoint-stalled/index.assets/logo.jpg&#34; alt=&#34;logo&#34;&gt;&lt;/p&gt;
&lt;p&gt;[TOC]&lt;/p&gt;
&lt;h2 id=&#34;概述&#34;&gt;概述&lt;/h2&gt;
&lt;p&gt;Java 支持好几种文件读取方法，本文要说的是小众的 &lt;code&gt;mmap(MappedByteBuffer)&lt;/code&gt; 以及它与 Safepoint、JVM 服务卡顿之间的关系。本文尝试用 eBPF 等分析方法，去证明具体环境下，问题的存在与否。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>java</category>
            
          
            
              <category>jvm</category>
            
          
            
              <category>safepoint</category>
            
          
            
              <category>kernel</category>
            
          
            
              <category>io</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Self-hosting 个人在线记事本 - Joplin</title>
        <link>https://blog.mygraphql.com/zh/notes/lifehacker/self-hosting-notebook/</link>
        <pubDate>Wed, 09 Aug 2023 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Wed, 09 Aug 2023 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/lifehacker/self-hosting-notebook/</guid>
        <description>&lt;h2 id=&#34;引&#34;&gt;引&lt;/h2&gt;
&lt;p&gt;现代生活，大部分人都有信息过载的烦恼。光是家庭事务、生活、工作的信息量就已经爆炸了。程序员群体更是要持续学习充电，信息量更大。好记性不如烂笔头，那么如何记才可以最大化记事的价值？电子化的记事是一个选项，只要手机在身，就可以方便记录与查阅。还可以多设备同步备份和离线查阅。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>self-hosting</category>
            
          
            
              <category>life-hacker</category>
            
          
            
              <category>noting</category>
            
          
            
              <category>note-writing</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>准 Self-hosting 的个人在线书架 - Zotero</title>
        <link>https://blog.mygraphql.com/zh/notes/lifehacker/online-bookshelf/</link>
        <pubDate>Wed, 02 Aug 2023 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Wed, 02 Aug 2023 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/lifehacker/online-bookshelf/</guid>
        <description>&lt;h2 id=&#34;引&#34;&gt;引&lt;/h2&gt;
&lt;p&gt;只要您还想在程序员道路上发展，那么长期的系统式的学习是少不了的。碎片时代，知识的学习渠道也在短平快化。似乎，没什么东西是一个 ChatGPT + 搜索解决不了的。但硬币总有两面，如果每个人都只停留在 “知道” 碎片知识的阶段，而你可以深入和融会贯通知识，并消化思考，整合。最少有以下好处：&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>self-hosting</category>
            
          
            
              <category>life-hacker</category>
            
          
            
              <category>book</category>
            
          
            
              <category>noting</category>
            
          
            
              <category>note-writing</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>分析 Java 应用在 Istio 下的 warm up</title>
        <link>https://blog.mygraphql.com/zh/notes/java/java-warm-up-tuning/</link>
        <pubDate>Sun, 09 Jul 2023 03:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sun, 09 Jul 2023 03:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/java/java-warm-up-tuning/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/java/java-warm-up-tuning/index.assets/W020220325787487242889.jpg&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;
&lt;h1 id=&#34;分析-java-应用在-istio-下的-warm-up&#34;&gt;分析 Java 应用在 Istio 下的 warm up&lt;/h1&gt;
&lt;h2 id=&#34;故事的开始&#34;&gt;故事的开始&lt;/h2&gt;
&lt;p&gt;在很久很久前的，有个测试找到一个开发，说 k8s 下 HPA(自动伸缩) 新启动的 pod 的 api latency 特别高：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/java/java-warm-up-tuning/index.assets/dashboard-high-latency-api.png&#34; alt=&#34;dashboard-high-latency-api&#34;&gt;&lt;/p&gt;
&lt;p&gt;需要注意，上图是在 Java 服务提供者自身观察到的 latency，即观察点是服务的 server 端或说 upstream 。有同学会问，这个重要吗？ api latency 就是 api latency 了，还要管是什么观察点的观察结果？&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>java</category>
            
          
            
              <category>jvm</category>
            
          
            
              <category>jit</category>
            
          
            
              <category>istio</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Old man in a hurry</title>
        <link>https://blog.mygraphql.com/zh/notes/wu/career/unemployed-old-man-in-a-hurry/unemployed-old-man-in-a-hurry/</link>
        <pubDate>Sun, 23 Apr 2023 10:00:00 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sun, 23 Apr 2023 10:00:00 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/wu/career/unemployed-old-man-in-a-hurry/unemployed-old-man-in-a-hurry/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;./unemployed-old-man-in-a-hurry.assets/image-20260424143857889.png&#34; alt=&#34;image-20260424143857889&#34;&gt;&lt;/p&gt;
&lt;p&gt;昨天，结束了一个长达 3 个月，5 轮的岗位面试。这是场跨国的面试，2 轮中国人 3 轮印度人。一开始说是 4 轮就有结果，但就在算是通过第 4 轮总监面试后，结果是总监换人，要加一轮 。而希望还是在最后加场的那一轮熄灭了。这也算是我大半年找工路上最接近岸边的一次了。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>career</category>
            
          
            
              <category>wu</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>基于 libbpf 的 TCP 连接延迟监视工具 tcpconnlat 分析 - eBPF基础知识 Part5</title>
        <link>https://blog.mygraphql.com/zh/notes/bpf/libbpf/libbpf-study-5-tcpconnlat/</link>
        <pubDate>Wed, 12 Apr 2023 03:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Wed, 12 Apr 2023 03:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/bpf/libbpf/libbpf-study-5-tcpconnlat/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/bpf/libbpf/libbpf-study-5-tcpconnlat/index.assets/image-20230413000154604.png&#34; alt=&#34;image-20230413000154604&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;基于-libbpf-的-tcp-连接延迟监视工具-tcpconnlat-分析---ebpf基础知识-part5&#34;&gt;基于 libbpf 的 TCP 连接延迟监视工具 tcpconnlat 分析 - eBPF基础知识 Part5&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;《eBPF基础知识》 系列简介：&lt;/p&gt;
&lt;p&gt;《eBPF基础知识》系列目标是整理一下 BPF 相关的基础知识。主要聚焦程序与内核互动接口部分。文章使用了 libbpf，但如果你不直接使用 libbpf，看本系列还是有一定意义的，因为它聚焦于程序与内核互动接口部分，而非 libbpf 封装本身。而所有 bpf 开发框架，都要以相似的方式跟内核互动。甚至框架本身就是基于 libbpf。哪怕是 golang/rust/python/BCC/bpftrace。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>kernel</category>
            
          
            
              <category>low-tec</category>
            
          
            
              <category>bpf</category>
            
          
            
              <category>ebpf</category>
            
          
            
              <category>eBPF基础知识</category>
            
          
            
              <category>fentry</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>经典 libbpf 范例: uprobe 分析 - eBPF基础知识 Part4</title>
        <link>https://blog.mygraphql.com/zh/notes/bpf/libbpf/libbpf-bootstrap-study-4-uprobe/</link>
        <pubDate>Mon, 03 Apr 2023 03:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Mon, 03 Apr 2023 03:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/bpf/libbpf/libbpf-bootstrap-study-4-uprobe/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/bpf/libbpf/libbpf-bootstrap-study-4-uprobe/index.assets/image-20230403233205803.png&#34; alt=&#34;image-20230403233205803&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;经典-libbpf-范例-uprobe-分析---ebpf基础知识-part4&#34;&gt;经典 libbpf 范例: uprobe 分析 - eBPF基础知识 Part4&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;《eBPF基础知识》 系列简介：&lt;/p&gt;
&lt;p&gt;《eBPF基础知识》系列目标是整理一下 BPF 相关的基础知识。主要聚焦程序与内核互动接口部分。文章使用了 libbpf，但如果你不直接使用 libbpf，看本系列还是有一定意义的，因为它聚焦于程序与内核互动接口部分，而非 libbpf 封装本身。而所有 bpf 开发框架，都要以相似的方式跟内核互动。甚至框架本身就是基于 libbpf。哪怕是 golang/rust/python/BCC/bpftrace。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>kernel</category>
            
          
            
              <category>low-tec</category>
            
          
            
              <category>bpf</category>
            
          
            
              <category>ebpf</category>
            
          
            
              <category>eBPF基础知识</category>
            
          
            
              <category>uprobe</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>经典 libbpf 范例: bootstrap 分析 - eBPF基础知识 Part3</title>
        <link>https://blog.mygraphql.com/zh/notes/bpf/libbpf/libbpf-bootstrap-study-2-bootstrap/</link>
        <pubDate>Sat, 25 Mar 2023 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sat, 25 Mar 2023 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/bpf/libbpf/libbpf-bootstrap-study-2-bootstrap/</guid>
        <description>&lt;h2 id=&#34;经典-libbpf-范例-bootstrap-分析---ebpf基础知识-part3&#34;&gt;经典 libbpf 范例: bootstrap 分析 - eBPF基础知识 Part3&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;《eBPF基础知识》 系列简介：&lt;/p&gt;
&lt;p&gt;《eBPF基础知识》系列目标是整理一下 BPF 相关的基础知识。主要聚焦程序与内核互动接口部分。文章使用了 libbpf，但如果你不直接使用 libbpf，看本系列还是有一定意义的，因为它聚焦于程序与内核互动接口部分，而非 libbpf 封装本身。而所有 bpf 开发框架，都要以相似的方式跟内核互动。甚至框架本身就是基于 libbpf。哪怕是 golang/rust/python/BCC/bpftrace。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>kernel</category>
            
          
            
              <category>low-tec</category>
            
          
            
              <category>bpf</category>
            
          
            
              <category>ebpf</category>
            
          
            
              <category>eBPF基础知识</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Linus 自传 [Just for FUN]读后感 - Part2 从一个书呆子（Nerd）的诞生，扯到现代教育</title>
        <link>https://blog.mygraphql.com/zh/notes/wu/biography/linus/just-for-fun-part2/</link>
        <pubDate>Fri, 17 Mar 2023 03:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Fri, 17 Mar 2023 03:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/wu/biography/linus/just-for-fun-part2/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/wu/biography/linus/just-for-fun-part2/index.assets/vic_20_bambino.jpg&#34; alt=&#34;Commodore VIC 20 – Cronologia – VIC 20&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;图片来源：&lt;a href=&#34;https://www.vic-20.it/commodore-vic-20-cronologia/&#34;&gt;www.vic-20.it&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;本文包括 Linus 自传 [Just for FUN 读书笔记] ——  一个书呆子（Nerd）的诞生 部分的读后感。讲述了 Linus 如何与计算机结缘。观察Linus 幼年时，对比现代科技环境与社会文化环境后的一些感想。也聊聊现代教育鸡娃的事实。作为一个程序员，同时也是一个小学生的家长，我的浅见。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>career</category>
            
          
            
              <category>wu</category>
            
          
            
              <category>philosophy</category>
            
          
            
              <category>biography</category>
            
          
            
              <category>Linus</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>BPF 系统接口 与 libbpf 示例分析 - eBPF基础知识 Part2</title>
        <link>https://blog.mygraphql.com/zh/notes/bpf/libbpf/libbpf-bootstrap-study-1-minimal/</link>
        <pubDate>Sat, 11 Mar 2023 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sat, 11 Mar 2023 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/bpf/libbpf/libbpf-bootstrap-study-1-minimal/</guid>
        <description>&lt;h2 id=&#34;bpf-系统接口-与-libbpf-minimal-示例分析---ebpf基础知识&#34;&gt;BPF 系统接口 与 libbpf minimal 示例分析 - eBPF基础知识&lt;/h2&gt;
&lt;p&gt;如果你学习 eBPF。那么你不久就会发现，几乎所有 eBPF 的架构，包括 &lt;code&gt;BCC&lt;/code&gt;/&lt;code&gt;bpftrace&lt;/code&gt; 在内，都在用户态使用了 &lt;code&gt;libbpf&lt;/code&gt; 这个 helper lib。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/bpf/libbpf/libbpf-bootstrap-study-1-minimal/libbpf-bootstrap-study-1-minimal.assets/image-20230311151420617.png&#34; alt=&#34;image-20230311151420617&#34;&gt;&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>kernel</category>
            
          
            
              <category>low-tec</category>
            
          
            
              <category>bpf</category>
            
          
            
              <category>ebpf</category>
            
          
            
              <category>eBPF基础知识</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Linus 自传 [Just for FUN]读后感 - Part1 前言</title>
        <link>https://blog.mygraphql.com/zh/notes/wu/biography/linus/just-for-fun/</link>
        <pubDate>Fri, 10 Mar 2023 03:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Fri, 10 Mar 2023 03:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/wu/biography/linus/just-for-fun/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/wu/biography/linus/just-for-fun/index.assets/logo.png&#34; alt=&#34;logo&#34;&gt;&lt;/p&gt;
&lt;p&gt;最近有幸读到 Linux 发起者 Linus 主笔的 [Just for FUN &amp;ndash; THE STORY OF AN ACCIDENTAL REVOLUTIONARY] 一书。比较有趣，怕日后忘记。于是写本文以记录。&lt;/p&gt;
&lt;h2 id=&#34;书评&#34;&gt;书评&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://book.douban.com/subject/1451172/&#34;&gt;豆瓣读书中有本书的评价&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;本书对作者的评价是：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;有些人天生就有能力领导数百万人。 另外有的人天生就是要编写改变世界的软件。 而同时做到了这两点的只有一个人：Linus Torvalds。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>career</category>
            
          
            
              <category>wu</category>
            
          
            
              <category>philosophy</category>
            
          
            
              <category>biography</category>
            
          
            
              <category>Linus</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>ELF 格式简述 - eBPF基础知识 Part1</title>
        <link>https://blog.mygraphql.com/zh/notes/low-tec/elf/elf-format/</link>
        <pubDate>Sat, 04 Mar 2023 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sat, 04 Mar 2023 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/low-tec/elf/elf-format/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/low-tec/elf/elf-format/index.assets/elf2.jpg&#34; alt=&#34;elf2&#34;&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;本文摘自我的《Mark’s DevOps 雜碎》中的 &lt;a href=&#34;https://devops-insider.mygraphql.com/zh_CN/latest/low-tec/elf/elf-format/elf-format.html&#34;&gt;《ELF 格式简述》&lt;/a&gt;。如图片不清，可转回原处。&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2 id=&#34;引&#34;&gt;引&lt;/h2&gt;
&lt;p&gt;为何要研究 ELF 格式？因为想深入点学习 eBPF ，充分利用它的特性，而非只利用它的名声，ELF 格式是跳不过的。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>kernel</category>
            
          
            
              <category>low-tec</category>
            
          
            
              <category>bpf</category>
            
          
            
              <category>ebpf</category>
            
          
            
              <category>eBPF基础知识</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>实时跟踪内核 TCP 连接失败与重试 - 基于 BPF</title>
        <link>https://blog.mygraphql.com/zh/notes/low-tec/trace/tcp-connect-syn-trace/</link>
        <pubDate>Fri, 17 Feb 2023 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Fri, 17 Feb 2023 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/low-tec/trace/tcp-connect-syn-trace/</guid>
        <description>&lt;h2 id=&#34;引&#34;&gt;引&lt;/h2&gt;
&lt;p&gt;生产环境的问题，按出现频率，大体可以分为两类：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;高频问题&lt;/li&gt;
&lt;li&gt;低频问题
&lt;ul&gt;
&lt;li&gt;周期性低频问题&lt;/li&gt;
&lt;li&gt;无周期随机发生问题
&lt;ul&gt;
&lt;li&gt;单例发生&lt;/li&gt;
&lt;li&gt;多例发生&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;一般，遇到 &lt;code&gt;无周期随机发生问题&lt;/code&gt; 且 &lt;code&gt;单例发生&lt;/code&gt;  的情况，是最难定位问题根源的。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>trace</category>
            
          
            
              <category>kernel</category>
            
          
            
              <category>ebpf</category>
            
          
            
              <category>tcp</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>从《Why I Left Facebook》扯到蘇東坡《卜算子》</title>
        <link>https://blog.mygraphql.com/zh/notes/wu/career/jerks/why-i-left-facebook/</link>
        <pubDate>Sun, 30 Oct 2022 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sun, 30 Oct 2022 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/wu/career/jerks/why-i-left-facebook/</guid>
        <description>&lt;h1 id=&#34;从why-i-left-facebook扯到蘇東坡卜算子&#34;&gt;从《Why I Left Facebook》扯到蘇東坡《卜算子》&lt;/h1&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/wu/career/jerks/why-i-left-facebook/why-i-left-facebook.assets/logo.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;前段时间，由于要研究一个 &lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-mem/&#34;&gt;TCP 接收缓冲区大小配置的问题&lt;/a&gt;，搜索到了一编 Blog： &lt;a href=&#34;https://hechao.li/2022/09/30/a-tcp-timeout-investigation/&#34;&gt;A TCP Timeout Investigation&lt;/a&gt;。 感觉 Blog 主是个现世小众的技术较真之人。 于是浏览了他的其它文章，看到一编： &lt;a href=&#34;https://hechao.li/2022/06/24/why-i-left-facebook/&#34;&gt;Why I Left Facebook&lt;/a&gt;。感触良多，故翻译之。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>career</category>
            
          
            
              <category>wu</category>
            
          
            
              <category>philosophy</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>容器化 TCP Socket 缓存、接收窗口参数</title>
        <link>https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-mem/</link>
        <pubDate>Sun, 02 Oct 2022 23:22:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sun, 02 Oct 2022 23:22:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-mem/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-mem/index.assets/logo.png&#34; alt=&#34;image-20221014112014044&#34;&gt;&lt;/p&gt;
&lt;p&gt;最近需要支持一个单 POD 的 TCP 连接数上 10k 的基础服务(Cassandra)的容器化。需要对其使用的资源（特别是TCP缓存内存），以及对相邻 Pod（同一  worker node 上运行的）影响（即容器隔离情况），等进行预估。故写本文，以备忘。希望对读者也有一定参考价值，毕竟做技术要较真，要么有时间和能力就自己看内核源码，如果不能，要看文档和文章的话，只能货比三家才靠谱。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>TCP</category>
            
          
            
              <category>kernel</category>
            
          
            
              <category>socket</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>可能是最完整的 TCP 连接健康指标工具 ss 的说明</title>
        <link>https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/</link>
        <pubDate>Sat, 01 Oct 2022 01:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sat, 01 Oct 2022 01:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/index.assets/image-20220801231018488.png&#34; alt=&#34;image-20220801231018488&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#%e5%86%99%e5%9c%a8%e5%89%8d%e9%9d%a2&#34;&gt;写在前面&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#tcp-%e8%bf%9e%e6%8e%a5%e5%81%a5%e5%ba%b7%e7%9a%84%e9%87%8d%e8%a6%81%e6%80%a7&#34;&gt;TCP 连接健康的重要性&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#%e5%a6%82%e4%bd%95%e6%9f%a5%e7%9c%8b-tcp-%e8%bf%9e%e6%8e%a5%e5%81%a5%e5%ba%b7&#34;&gt;如何查看 TCP 连接健康&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#%e5%ae%b9%e5%99%a8%e5%8c%96%e6%97%b6%e4%bb%a3&#34;&gt;容器化时代&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#%e6%9b%be%e7%a5%9e%e7%a7%98%e7%9a%84-ss&#34;&gt;曾神秘的 &lt;code&gt;ss&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#%e6%9b%b4%e7%a5%9e%e7%a7%98%e7%9a%84%e6%97%a0%e6%96%87%e6%a1%a3%e6%8c%87%e6%a0%87&#34;&gt;更神秘的无文档指标&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#ss-%e7%ae%80%e4%bb%8b&#34;&gt;&lt;code&gt;ss&lt;/code&gt; 简介&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#%e5%ad%97%e6%ae%b5%e8%af%b4%e6%98%8e&#34;&gt;字段说明&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#recv-q%e4%b8%8esend-q&#34;&gt;Recv-Q与Send-Q&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#%e5%9f%ba%e6%9c%ac%e4%bf%a1%e6%81%af&#34;&gt;基本信息&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#%e5%86%85%e5%ad%98tcp-windowtcp-buffer-%e7%9b%b8%e5%85%b3&#34;&gt;内存/TCP Window/TCP Buffer 相关&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#skmem&#34;&gt;skmem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#rcv_space&#34;&gt;rcv_space&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#rcv_ssthresh&#34;&gt;rcv_ssthresh&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#mtumss-%e7%9b%b8%e5%85%b3&#34;&gt;MTU/MSS 相关&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#mss&#34;&gt;mss&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#advmss&#34;&gt;advmss&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#pmtu&#34;&gt;pmtu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#rcvmss&#34;&gt;rcvmss&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#flow-control-%e6%b5%81%e6%8e%a7&#34;&gt;Flow control 流控&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#cwnd&#34;&gt;cwnd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#ssthresh&#34;&gt;ssthresh&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#retrans-%e9%87%8d%e4%bc%a0%e7%9b%b8%e5%85%b3&#34;&gt;retrans 重传相关&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#retrans&#34;&gt;retrans&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#bytes_retrans&#34;&gt;bytes_retrans&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#timer-%e5%ae%9a%e6%97%b6%e5%99%a8&#34;&gt;timer 定时器&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#other&#34;&gt;Other&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#app_limited&#34;&gt;app_limited&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#%e7%89%b9%e5%88%ab%e6%93%8d%e4%bd%9c&#34;&gt;特别操作&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#specified-network-namespace&#34;&gt;specified network namespace&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#kill-socket&#34;&gt;kill socket&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#%e7%9b%91%e5%90%ac%e8%bf%9e%e6%8e%a5%e5%85%b3%e9%97%ad%e4%ba%8b%e4%bb%b6&#34;&gt;监听连接关闭事件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#%e8%bf%87%e6%bb%a4%e5%99%a8&#34;&gt;过滤器&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#%e7%9b%91%e6%8e%a7%e4%bd%bf%e7%94%a8%e4%be%8b%e5%ad%90&#34;&gt;监控使用例子&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#%e5%8e%9f%e7%90%86&#34;&gt;原理&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#netlink&#34;&gt;Netlink&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#netlink_inet_diag&#34;&gt;NETLINK_INET_DIAG&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#idiag_ext&#34;&gt;idiag_ext&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#netlink-in-deep&#34;&gt;Netlink in deep&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-inspect/#%e5%8f%82%e8%80%83&#34;&gt;参考&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;写在前面&#34;&gt;写在前面&lt;/h2&gt;
&lt;p&gt;我不是网络专家，只是在经历了多年的生产和测试环境网络问题排查后，不想再得过且过，于是记录下所学到的知识。由于对 TCP 栈的实现了解有限，所以内容仅作参考。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>kernel</category>
            
          
            
              <category>TCP</category>
            
          
            
              <category>socket</category>
            
          
            
              <category>ss</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>持续学习和关心个人资讯的IT人，为何考虑学点 Self-hosting</title>
        <link>https://blog.mygraphql.com/zh/notes/lifehacker/self-hosting/</link>
        <pubDate>Sat, 02 Jul 2022 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sat, 02 Jul 2022 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/lifehacker/self-hosting/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/lifehacker/self-hosting/index.assets/logo.jpg&#34; alt=&#34;ipad 使用运行于树莓派上的 vscode&#34;&gt;&lt;br /&gt;
&lt;em&gt;图：pad 上使用运行于我树莓派上的 vscode 来写 blog&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&#34;引&#34;&gt;引&lt;/h2&gt;
&lt;p&gt;作为一个社会人，生活在不确定性的环境中，我们都注重个人财产的把控。但没多少人认真考虑过个人拥有的资讯的把控。如果你完全相信大厂们如何对待你的聊天记录，相册……且信它们永远保密且保持运营，那么……。否则信息保存和备份在自己手中，才是最可把控的。另外，作为一个爱学习和折腾的程序员，如果没有自己自主的实验环境，知识管理环境，是被动和受限的。这两个问题，&amp;ldquo;自托管(Self-hosting)&amp;rdquo; 是解决选项之一。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>self-hosting</category>
            
          
            
              <category>life-hacker</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>谁动了我的 CPU 频率 —— CPU 性能之迷 Part 2</title>
        <link>https://blog.mygraphql.com/zh/notes/low-tec/kernel/cpu-frequency/</link>
        <pubDate>Wed, 29 Jun 2022 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Wed, 29 Jun 2022 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/low-tec/kernel/cpu-frequency/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/low-tec/kernel/cpu-frequency/index.assets/2018-02-20_2355-16564669211492.jpg&#34; alt=&#34;2018-02-20_2355&#34;&gt;&lt;/p&gt;
&lt;p&gt;目录：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/kernel/cpu-frequency/#%e4%b8%ba%e4%bd%95%e6%9c%89%e6%9c%ac%e6%96%87&#34;&gt;为何有本文&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/kernel/cpu-frequency/#%e4%bb%80%e4%b9%88%e6%98%af%e5%8a%a8%e6%80%81-cpu-%e9%a2%91%e7%8e%87&#34;&gt;什么是动态 CPU 频率&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/kernel/cpu-frequency/#%e4%bb%80%e4%b9%88%e6%98%af-p-state&#34;&gt;什么是 p-state&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/kernel/cpu-frequency/#linux-cpu-%e6%80%a7%e8%83%bd%e4%bc%b8%e7%bc%a9cpu-performance-scaling&#34;&gt;Linux CPU 性能伸缩(CPU performance scaling)&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/kernel/cpu-frequency/#cpufreq-policycpu-%e9%a2%91%e7%8e%87%e7%bc%a9%e6%94%be%e7%ad%96%e7%95%a5&#34;&gt;CPUFreq Policy(CPU 频率缩放策略)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/kernel/cpu-frequency/#cpufreq-policy-%e7%9a%84-sysfs-%e6%96%87%e4%bb%b6%e6%8e%a5%e5%8f%a3&#34;&gt;CPUFreq Policy 的 sysfs 文件接口&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/kernel/cpu-frequency/#policy-%e9%80%9a%e7%94%a8%e5%b1%9e%e6%80%a7&#34;&gt;policy 通用属性&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/kernel/cpu-frequency/#%e9%80%9a%e7%94%a8%e7%9a%84-scaling-governor&#34;&gt;通用的 Scaling Governor&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/kernel/cpu-frequency/#performance---scaling-governor&#34;&gt;&lt;code&gt;performance&lt;/code&gt; - Scaling Governor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/kernel/cpu-frequency/#powersave---scaling-governor&#34;&gt;&lt;code&gt;powersave&lt;/code&gt; - Scaling Governor&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/kernel/cpu-frequency/#%e9%9d%9e-intel-cpu-%e7%9a%84-frequency-boost-support&#34;&gt;非 Intel CPU 的 Frequency Boost Support&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/kernel/cpu-frequency/#%e9%9d%9e-intel-cpu-%e7%9a%84-boost-%e7%9a%84-sysfs-%e6%96%87%e4%bb%b6%e6%8e%a5%e5%8f%a3&#34;&gt;非 Intel CPU 的 boost 的 sysfs 文件接口&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/kernel/cpu-frequency/#intel-cpu-%e7%9a%84-scaling-driver&#34;&gt;Intel CPU 的 Scaling Driver&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/kernel/cpu-frequency/#%e6%93%8d%e4%bd%9c%e6%a8%a1%e5%bc%8f-operation-modes&#34;&gt;操作模式 (Operation Modes)&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/kernel/cpu-frequency/#active-mode&#34;&gt;Active Mode&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/kernel/cpu-frequency/#active-mode-%e4%b8%94%e5%bc%80%e5%90%af-hwp&#34;&gt;Active Mode 且开启 HWP&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/kernel/cpu-frequency/#hwp--performance&#34;&gt;HWP + &lt;code&gt;performance&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/kernel/cpu-frequency/#hwp--powersave&#34;&gt;HWP + &lt;code&gt;powersave&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/kernel/cpu-frequency/#active-mode-%e4%b8%94%e7%a6%81%e7%94%a8-hwp&#34;&gt;Active Mode 且禁用 HWP&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/kernel/cpu-frequency/#passive-mode&#34;&gt;Passive Mode&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/kernel/cpu-frequency/#turbo-p-states-support&#34;&gt;Turbo P-states Support&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/kernel/cpu-frequency/#sysfs-%e4%b8%ad%e7%9a%84-no_turbo-%e5%b1%9e%e6%80%a7&#34;&gt;&lt;code&gt;sysfs&lt;/code&gt; 中的 &lt;code&gt;no_turbo&lt;/code&gt; 属性&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/kernel/cpu-frequency/#intel_pstate-%e7%9a%84-sysfs-%e9%85%8d%e7%bd%ae&#34;&gt;intel_pstate 的 sysfs 配置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/kernel/cpu-frequency/#global-attributes&#34;&gt;Global Attributes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/kernel/cpu-frequency/#%e5%ae%9e%e6%97%b6%e7%9b%91%e6%8e%a7-cpu-%e5%ae%9e%e9%99%85%e9%a2%91%e7%8e%87&#34;&gt;实时监控 CPU 实际频率&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/kernel/cpu-frequency/#turbostat&#34;&gt;turbostat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/kernel/cpu-frequency/#cpupower&#34;&gt;cpupower&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/kernel/cpu-frequency/#%e5%86%85%e6%a0%b8%e6%97%a5%e5%bf%97&#34;&gt;内核日志&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/kernel/cpu-frequency/#hwp-%e6%98%af%e5%90%a6%e5%bc%80%e5%90%af&#34;&gt;HWP 是否开启&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/kernel/cpu-frequency/#%e9%9d%99%e6%80%81%e9%85%8d%e7%bd%ae&#34;&gt;静态配置&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;为何有本文&#34;&gt;为何有本文&lt;/h2&gt;
&lt;p&gt;很多人知道 CPU 频率会影响 CPU 性能，也知道频率会动态变化，且知道 Linux 有 performance/powersave 两种频率控制策略。但很少人知道背后的软件原理，更少人知道如何调优策略，和监控实际 CPU 频率。本文想聊聊这些。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>performance</category>
            
          
            
              <category>hyper-threading</category>
            
          
            
              <category>超线程</category>
            
          
            
              <category>hardware</category>
            
          
            
              <category>动态调频</category>
            
          
            
              <category>turbo-boost</category>
            
          
            
              <category>p-state</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>被误解的CPU利用率、超线程、动态调频 —— CPU 性能之迷 Part 1</title>
        <link>https://blog.mygraphql.com/zh/notes/hw/hyper-threading/</link>
        <pubDate>Sun, 26 Jun 2022 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sun, 26 Jun 2022 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/hw/hyper-threading/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/hw/hyper-threading/index.assets/image-20220619120147326.png&#34; alt=&#34;image-20220619120147326&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;引&#34;&gt;引&lt;/h2&gt;
&lt;p&gt;性能测试、压力测试、业务系统性能容量评估。这 3 件事，可以认为是大部分程序员/软件开发从业者都需要面对的事。但，奇怪的是，很多人花了很多时间去做完成这些&lt;strong&gt;工作任务&lt;/strong&gt;，却很少有人有计划地、系统地花时间去学习和研究相关的知识。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>performance</category>
            
          
            
              <category>hyper-threading</category>
            
          
            
              <category>超线程</category>
            
          
            
              <category>CPU利用率</category>
            
          
            
              <category>hardware</category>
            
          
            
              <category>动态调频</category>
            
          
            
              <category>turbo-boost</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>FOSS(Free and open-source software)爱好者，如何发展职业生涯 Part 1</title>
        <link>https://blog.mygraphql.com/zh/notes/wu/career/career-foss/</link>
        <pubDate>Sun, 12 Jun 2022 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sun, 12 Jun 2022 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/wu/career/career-foss/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/wu/career/career-foss/career-FOSS-enthusiast.assets/image-20220612143151231.png&#34; alt=&#34;image-20220612143151231&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;故事&#34;&gt;故事&lt;/h2&gt;
&lt;p&gt;这周不聊技术。想聊聊诗和远方，毕竟现实无法改变时，需要诗和远方补救一下。我工作于一家有情怀的公司，在 1890 年就开始为中国服务了。我因生存和工作语言学习需要，坚持三年一直在听英语技术类节目，其中有一个我是比较欣赏的：&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>career</category>
            
          
            
              <category>wu</category>
            
          
            
              <category>philosophy</category>
            
          
            
              <category>FOSS</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>兜兜转转——Linux/容器的权限(Capabilities)控制模型</title>
        <link>https://blog.mygraphql.com/zh/notes/low-tec/kernel/process-capabilities/</link>
        <pubDate>Sun, 05 Jun 2022 16:12:15 +0900</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sun, 05 Jun 2022 16:12:15 +0900</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/low-tec/kernel/process-capabilities/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/low-tec/kernel/process-capabilities/index.assets/image-20220605183022151.png&#34; alt=&#34;image-20220605183022151&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;引&#34;&gt;引&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;如果有人问我，程序员做的事，最没实际价值，最容易让用户不爽的是什么?&lt;/p&gt;
&lt;p&gt;回答: —— 安全&lt;/p&gt;
&lt;p&gt;如果有人问我，程序员做的事，最必要的是什么?&lt;/p&gt;
&lt;p&gt;回答: —— 安全&lt;/p&gt;
&lt;p&gt;如果有人问我，安全核心问题是什么?&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>capabilities</category>
            
          
            
              <category>kernel</category>
            
          
            
              <category>security</category>
            
          
            
              <category>container</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>上帝和 Istio 打架时，程序员如何自我救赎？ —— 记一次开发 Envoy WASM Filter 修正任性的 HTTP Header</title>
        <link>https://blog.mygraphql.com/zh/notes/cloud/envoy/wasm/wasm-header-repairer/</link>
        <pubDate>Sat, 28 May 2022 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sat, 28 May 2022 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/cloud/envoy/wasm/wasm-header-repairer/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/cloud/envoy/wasm/wasm-header-repairer/index.assets/image-20220529215423262.png&#34; alt=&#34;logo&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;引&#34;&gt;引&lt;/h2&gt;
&lt;p&gt;故事发生在公元 2022 年的夏天。上帝（化名）在上线流量测试中，发现在未引入 Istio 前正常 HTTP 200 的请求，引入 Istio Gateway 后变为 HTTP 400 了。而出现问题的流量均带有不合 HTTP 规范的 HTTP Header。如冒号前多了个 &lt;strong&gt;空格&lt;/strong&gt;：&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>cloud</category>
            
          
            
              <category>istio</category>
            
          
            
              <category>envoy</category>
            
          
            
              <category>wasm</category>
            
          
            
              <category>http</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>BPF 拓荒者 —— Brendan Gregg 与 Netflix 的故事</title>
        <link>https://blog.mygraphql.com/zh/notes/wu/career/brendan@netflix/</link>
        <pubDate>Mon, 09 May 2022 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Mon, 09 May 2022 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/wu/career/brendan@netflix/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/wu/career/brendan@netflix/index.assets/image-20220509222801798.png&#34; alt=&#34;image-20220509222801798&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;译者写在开头&#34;&gt;译者写在开头&lt;/h2&gt;
&lt;p&gt;在我的上一篇文章：&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/wu/career/brendan/&#34;&gt;Brendan@Intel.com&lt;/a&gt; 中，我翻译了他与 Intel 的故事。这次，我们时光倒流一下，说说前传：Brendan Gregg 与 Netflix 的故事。&lt;/p&gt;
&lt;p&gt;我写博客的出发点是想把自己所学所思的东西都记录下来。纯理性技术是一方面，对现世的思考也是一方面。本来想做个平凡的人，最近却一不小心变为平烦人（平庸且很多烦恼的人）。没法，生活总要继续，深度的技术学习和写作只能慢一慢。但这不影响我对技术社区动态的好奇心。由其是 yyds - Brendan Gregg 的动态。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>career</category>
            
          
            
              <category>wu</category>
            
          
            
              <category>philosophy</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Brendan@Intel.com</title>
        <link>https://blog.mygraphql.com/zh/notes/wu/career/brendan/</link>
        <pubDate>Thu, 05 May 2022 23:12:15 +0800</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Thu, 05 May 2022 23:12:15 +0800</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/wu/career/brendan/</guid>
        <description>&lt;h2 id=&#34;译者序&#34;&gt;译者序&lt;/h2&gt;
&lt;p&gt;金庸笔下的《鹿鼎记》有：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;平生不识陈近南，便称英雄也枉然&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;现代的认真搞技术的后端程序员，应该也有一句：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;平生不识 Brendan Gregg，便呆 BAT 也 SoSo&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;从 2016 年开始，做一个 JVM 调优开始，就关注 Brendan Gregg 的 Blog 和书。前年开始看他的 [System Performance Enterprise and the Cloud] 和 [BPF Performance Tools]。由于学识浅薄，一开始读不得正解，也不明真相。直到最近一年，花时间去恶补各种基础知识，结合一些工作实践，才茅塞顿开。不得不说，好的技术作品不是读一次就能懂的。可能在技术路上，随着经验和知识的积累，每次阅读都有不同的收获。这就像看《西游记》一样，人生的每个阶段看，都是不一样的感悟。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>career</category>
            
          
            
              <category>wu</category>
            
          
            
              <category>philosophy</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>网络包的内核漂流记 Part 2 - BPF 跟踪 epoll/Envoy 事件与调度</title>
        <link>https://blog.mygraphql.com/zh/notes/low-tec/network/bpf-trace-net-stack/</link>
        <pubDate>Wed, 04 May 2022 16:12:15 +0900</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Wed, 04 May 2022 16:12:15 +0900</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/low-tec/network/bpf-trace-net-stack/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/bpf-trace-net-stack/index.assets/ending.jpg&#34; alt=&#34;logo&#34;&gt;&lt;/p&gt;
&lt;p&gt;注，原文来自 &lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/bpf-trace-net-stack/&#34;&gt;https://blog.mygraphql.com/zh/notes/low-tec/network/bpf-trace-net-stack/&lt;/a&gt; 。如你看到的转载图片不清，请回到原文。&lt;/p&gt;
&lt;h2 id=&#34;为何&#34;&gt;为何&lt;/h2&gt;
&lt;p&gt;现代人好像都很忙，忙着跟遥远的人社交，却很容易忽视眼前的人事，更别提那些不直接体现出价值的基础认知了。要花时间认真看一编文章前，都要问一个问题：WHY。这才会有 &lt;code&gt;TLDR;&lt;/code&gt; 的出现。终身学习是个口号，但也仅仅是个口号。看看身边的那些放満书的人，有几个真去阅读？社会人大都有现实地认为，持续学习只应该发生在考试前。在社会卷时，就好好做个社会人。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>trace</category>
            
          
            
              <category>kernel</category>
            
          
            
              <category>ebpf</category>
            
          
            
              <category>network</category>
            
          
            
              <category>epoll</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>网络包的内核漂流记 Part 1 - 图解网络包接收流程</title>
        <link>https://blog.mygraphql.com/zh/notes/low-tec/network/kernel-net-stack/</link>
        <pubDate>Mon, 18 Apr 2022 16:12:15 +0900</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Mon, 18 Apr 2022 16:12:15 +0900</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/low-tec/network/kernel-net-stack/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/kernel-net-stack/index.assets/logo.jpg&#34; alt=&#34;logo&#34;&gt;&lt;/p&gt;
&lt;p&gt;注，原文来自 &lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/kernel-net-stack/&#34;&gt;https://blog.mygraphql.com/zh/notes/low-tec/network/kernel-net-stack/&lt;/a&gt; 。如你看到的转载图片不清，请回到原文。&lt;/p&gt;
&lt;h2 id=&#34;目录&#34;&gt;目录&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/kernel-net-stack/#%e7%9b%ae%e5%bd%95&#34;&gt;目录&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/kernel-net-stack/#%e7%bd%91%e7%bb%9c%e5%8c%85%e7%9a%84%e5%86%85%e6%a0%b8%e6%bc%82%e6%b5%81%e8%ae%b0%e7%b3%bb%e5%88%97%e4%bb%8b%e7%bb%8d&#34;&gt;《网络包的内核漂流记》系列介绍&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/kernel-net-stack/#%e9%a3%8e%e6%a0%bc%e6%a0%b7%e5%bc%8f%e6%9c%ac%e6%96%87%e7%9a%84%e4%ba%a4%e4%ba%92%e9%98%85%e8%af%bb%e6%96%b9%e5%bc%8f-&#34;&gt;风格、样式、本文的交互阅读方式 📖&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/kernel-net-stack/#iso-%e7%bd%91%e7%bb%9c%e6%a8%a1%e5%9e%8b&#34;&gt;ISO 网络模型&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/kernel-net-stack/#%e7%bd%91%e7%bb%9c%e5%8c%85%e6%8e%a5%e6%94%b6%e6%b5%81%e7%a8%8b%e6%a6%82%e8%bf%b0&#34;&gt;网络包接收流程概述&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/kernel-net-stack/#%e7%bd%91%e7%bb%9c%e5%8c%85%e6%8e%a5%e6%94%b6%e6%ad%a5%e9%aa%a4&#34;&gt;网络包接收步骤&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/kernel-net-stack/#%e5%88%9d%e5%a7%8b%e5%8c%96%e4%b8%8e%e9%85%8d%e7%bd%ae&#34;&gt;初始化与配置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/kernel-net-stack/#irq-%e5%a4%84%e7%90%86&#34;&gt;IRQ 处理&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/kernel-net-stack/#softirq-%e4%b8%ad%e5%8a%a0%e8%bd%bd%e7%bd%91%e7%bb%9c%e5%8c%85%e5%88%b0%e5%86%85%e5%ad%98&#34;&gt;SoftIRQ 中加载网络包到内存&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/kernel-net-stack/#softirq-%e4%b8%ad%e6%8e%a8%e9%80%81%e7%bd%91%e7%bb%9c%e5%8c%85%e5%88%b0%e4%b8%8a%e5%b1%82&#34;&gt;SoftIRQ 中推送网络包到上层&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/kernel-net-stack/#%e7%bb%93%e5%b0%be&#34;&gt;结尾&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mygraphql.com/zh/notes/low-tec/network/kernel-net-stack/#%e7%9b%b8%e5%85%b3&#34;&gt;相关&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;网络包的内核漂流记系列介绍&#34;&gt;《网络包的内核漂流记》系列介绍&lt;/h2&gt;
&lt;p&gt;大家知道，网络数据来源于网线、光纤、无线电波上的比特(bit)，然后到网卡，到内核，最后到应用进程 socket。事情好像很简单。但如果是 SRE/DevOps 或是 Performance Engineer ，需要做细致的监控和优化时，这些显然是不够的。引用本文主要参考作者的原话：&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>trace</category>
            
          
            
              <category>kernel</category>
            
          
            
              <category>ebpf</category>
            
          
            
              <category>network</category>
            
          
            
              <category>NIC</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>gdb 调试 istio proxy (envoy)</title>
        <link>https://blog.mygraphql.com/zh/notes/cloud/envoy/gdb-envoy/</link>
        <pubDate>Thu, 10 Mar 2022 16:12:15 +0900</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Thu, 10 Mar 2022 16:12:15 +0900</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/cloud/envoy/gdb-envoy/</guid>
        <description>&lt;p&gt;出于各种原因，需要 debug istio-proxy (envoy)，记录一下步骤，希望地球上的有缘人有用。&lt;/p&gt;
&lt;h2 id=&#34;编译生成执行文件&#34;&gt;编译生成执行文件&lt;/h2&gt;
&lt;h3 id=&#34;下载-code&#34;&gt;下载 code&lt;/h3&gt;
&lt;p&gt;我用的是 release-1.11.1-patch。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/istio/proxy.git
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; proxy
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;PROXY_HOME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;pwd&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout -b release-1.11.1-patch origin/release-1.11.1-patch
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;容器中编译&#34;&gt;容器中编译&lt;/h3&gt;
&lt;p&gt;编译大项目，是个环境相关的工作。对于我这小白，还是直接用 Istio 官方 CI 的编译用的容器。好处是：&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>trace</category>
            
          
            
              <category>kernel</category>
            
          
            
              <category>ebpf</category>
            
          
            
              <category>istio</category>
            
          
            
              <category>envoy</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>2022年书目推荐 —— 来自 goto podcast</title>
        <link>https://blog.mygraphql.com/zh/notes/wu/books/books-2021/</link>
        <pubDate>Sun, 26 Dec 2021 23:12:15 +0900</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sun, 26 Dec 2021 23:12:15 +0900</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/wu/books/books-2021/</guid>
        <description>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;不知不觉，口罩一戴就是两年。快到年底了，是时候翻开年初写的总结和计划，看看那个梦想中的自我和实现中的自我的距离了。如果看完这个距离，还是对来年有憧憬，那么我们来看看有什么可以改变的。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>book</category>
            
          
            
              <category>wu</category>
            
          
            
              <category>philosophy</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>把大象装入货柜里——Java容器内存拆解</title>
        <link>https://blog.mygraphql.com/zh/notes/java/native-mem/java-native-mem-case/</link>
        <pubDate>Wed, 06 Oct 2021 08:47:11 +0100</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Wed, 06 Oct 2021 08:47:11 +0100</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/java/native-mem/java-native-mem-case/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/java/native-mem/java-native-mem-case/logo.png&#34; alt=&#34;&#34;&gt;&lt;br /&gt;
&lt;em&gt;[图片源：https://bell-sw.com/announcements/2020/10/28/JVM-in-Linux-containers-surviving-the-isolation/]&lt;/em&gt;&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>cloud</category>
            
          
            
              <category>kernel</category>
            
          
            
              <category>java</category>
            
          
            
              <category>cgroup</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>码农幽默英语排行榜 S1E1</title>
        <link>https://blog.mygraphql.com/zh/notes/my-english/it-fun-english/fun-english-s1e1/</link>
        <pubDate>Sun, 03 Oct 2021 15:12:15 +0900</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sun, 03 Oct 2021 15:12:15 +0900</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/my-english/it-fun-english/fun-english-s1e1/</guid>
        <description>&lt;h2 id=&#34;缘起&#34;&gt;缘起&lt;/h2&gt;
&lt;p&gt;还记得 15 年前，外企还是相当部分程序员的向往。而 2021 了，情况有了相当大的变化。开源界也有相当多的国人开源项目和文档了。所以很多新码农开始提出一个问题：都 2021 了，英文还是码农的基本素养吗？&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>english</category>
            
          
            
              <category>fun-english</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>存储老爷车上云 —— iSCSI简介</title>
        <link>https://blog.mygraphql.com/zh/notes/hw/scsi/</link>
        <pubDate>Sun, 22 Aug 2021 08:47:11 +0100</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sun, 22 Aug 2021 08:47:11 +0100</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/hw/scsi/</guid>
        <description>&lt;h2 id=&#34;缘由&#34;&gt;缘由&lt;/h2&gt;
&lt;p&gt;我自认不是一个特别能鸡血自己去学习那些不直接应用到的知识的人。所以到现在还是没能深入 JVM 和红黑树，更不用说 Paxos/Raft 了。不过，如果有解决切实问题需要时，还算能快速入门吧。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>cloud</category>
            
          
            
              <category>kernel</category>
            
          
            
              <category>csi</category>
            
          
            
              <category>storage</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Benchmark Tools</title>
        <link>https://blog.mygraphql.com/zh/notes/performance/benchmarking/benchmark-tools/</link>
        <pubDate>Thu, 13 May 2021 15:12:15 +0900</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Thu, 13 May 2021 15:12:15 +0900</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/performance/benchmarking/benchmark-tools/</guid>
        <description>&lt;h2 id=&#34;cpu-benchmark&#34;&gt;CPU Benchmark&lt;/h2&gt;
&lt;p&gt;The SysBench system benchmark suite has a simple CPU benchmark tool that calculates prime numbers. For example:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# sysbench --num-threads=8 --test=cpu --cpu-max-prime=100000 run
sysbench 0.4.12:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 8

Doing CPU performance benchmark

Threads started!
Done.

Maximum prime number checked in CPU test: 100000

Test execution summary:
    total time:                          30.4125s
    total number of events:              10000
    total time taken by event execution: 243.2310
    per-request statistics:
         min:                                 24.31ms
         avg:                                 24.32ms
         max:                                 32.44ms
         approx.  95 percentile:              24.32ms

Threads fairness:
    events (avg/stddev):           1250.0000/1.22
    execution time (avg/stddev):   30.4039/0.01
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This executed eight threads, with a maximum prime number of 100,000. The runtime was 30.4 s, which can be used for comparison with the results from other systems or configurations (assuming many things, such as that identical compiler options were used to build the software; see Chapter 12, Benchmarking).&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>performance</category>
            
          
            
              <category>benchmark</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>tty</title>
        <link>https://blog.mygraphql.com/zh/notes/low-tec/kernel/tty/</link>
        <pubDate>Sat, 08 May 2021 15:12:15 +0900</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sat, 08 May 2021 15:12:15 +0900</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/low-tec/kernel/tty/</guid>
        <description>&lt;h2 id=&#34;jobs&#34;&gt;Jobs&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/low-tec/kernel/tty/index.assets/exampleterm.png&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/low-tec/kernel/tty/index.assets/examplediagram.png&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;SIGHUP&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;默认动作：Terminate&lt;/li&gt;
&lt;li&gt;可能动作：Terminate, Ignore, Function call&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;当&lt;strong&gt;检测到 hangup&lt;/strong&gt; 时，&lt;strong&gt;UART 驱动&lt;/strong&gt;会向&lt;strong&gt;整个 session&lt;/strong&gt; 发送 SIGHUP 信号。 正常情况下，这会 kill 掉所有进程。某些程序，例如 &lt;strong&gt;&lt;code&gt;nohup(1)&lt;/code&gt; 和 &lt;code&gt;screen(1)&lt;/code&gt;，会从他们的 session（和 TTY）中 detach 出来&lt;/strong&gt;， 因此这些程序的子进程无法关注到 hangup 事件。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>linux</category>
            
          
            
              <category>kernel</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Awesome load test tools</title>
        <link>https://blog.mygraphql.com/zh/notes/performance/performance-test/pt-tools/</link>
        <pubDate>Thu, 06 May 2021 15:12:15 +0900</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Thu, 06 May 2021 15:12:15 +0900</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/performance/performance-test/pt-tools/</guid>
        <description>&lt;h3 id=&#34;k6&#34;&gt;k6&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/k6io/k6&#34;&gt;https://github.com/k6io/k6&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;locust&#34;&gt;Locust&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://docs.locust.io/en/stable/what-is-locust.html&#34;&gt;https://docs.locust.io/en/stable/what-is-locust.html&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;gatling&#34;&gt;gatling&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://gatling.io/docs/current/http/http_request/&#34;&gt;https://gatling.io/docs/current/http/http_request/&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;artillery&#34;&gt;artillery&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://artillery.io/docs/guides/overview/welcome.html&#34;&gt;https://artillery.io/docs/guides/overview/welcome.html&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;wrk&#34;&gt;wrk&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/wg/wrk&#34;&gt;https://github.com/wg/wrk&lt;/a&gt;&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>performance</category>
            
          
            
              <category>load test</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Java 内置 Class Loader</title>
        <link>https://blog.mygraphql.com/zh/notes/java/classloader/builtin/</link>
        <pubDate>Thu, 01 Apr 2021 15:12:15 +0900</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Thu, 01 Apr 2021 15:12:15 +0900</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/java/classloader/builtin/</guid>
        <description>&lt;h2 id=&#34;内置-classloader&#34;&gt;内置 Classloader&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/java/classloader/builtin/index.assets/clhierarchy.gif&#34; alt=&#34;The class loader delegation model&#34;&gt;&lt;/p&gt;
&lt;p&gt;Class loaders load classes and resources present on their respective classpath:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;System or application class loaders load classes from the application classpath&lt;/li&gt;
&lt;li&gt;Extension class loaders search on the Extension classpath (&lt;em&gt;JRE/lib/ext&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;Bootstrap class loader looks on the Bootstrap classpath (&lt;em&gt;JRE/lib/rt.jar&lt;/em&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We can customize the default class loading behavior as well. We can explicitly specify the class loader while loading a class dynamically.&lt;/p&gt;
&lt;p&gt;However, we should note that if we load the same class from different types of class loaders, these will be seen as different resources by the JVM.&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>java</category>
            
          
            
              <category>classloader</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Opentelemetry Java Agent 浅度解构</title>
        <link>https://blog.mygraphql.com/zh/notes/cloud/observability/opentelemetry/opentelemetry-java/opentelemetry-java/</link>
        <pubDate>Thu, 01 Apr 2021 15:12:15 +0900</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Thu, 01 Apr 2021 15:12:15 +0900</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/cloud/observability/opentelemetry/opentelemetry-java/opentelemetry-java/</guid>
        <description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/docs/contributing/javaagent-jar-components.md&#34;&gt;https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/docs/contributing/javaagent-jar-components.md&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;index.assets/initialization-sequence.svg&#34; alt=&#34;Agent initialization sequence&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;index.assets/classloader-state.svg&#34; alt=&#34;Agent classloader state&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;conf&#34;&gt;Conf&lt;/h2&gt;
&lt;h5 id=&#34;creating-spans-around-methods-with-otelinstrumentationmethodsinclude&#34;&gt;Creating spans around methods with otel.instrumentation.methods.include&lt;/h5&gt;
&lt;p&gt;Ref: &lt;a href=&#34;https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/docs/manual-instrumentation.md&#34;&gt;https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/docs/manual-instrumentation.md&lt;/a&gt;&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Format is &amp;#34;java -Dotel.instrumentation.methods.include=my.package.MyClass1[method1,method2];my.package.MyClass2[method3]&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;classloader&#34;&gt;Classloader&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[arthas@16908]$ classloader -t
+-BootstrapClassLoader                                                                                                 
+-io.opentelemetry.javaagent.bootstrap.AgentClassLoader@379619aa                                                       
+-sun.misc.Launcher$ExtClassLoader@41fa769c                                                                            
  +-com.taobao.arthas.agent.ArthasClassloader@3697b340                                                                 
  +-sun.misc.Launcher$AppClassLoader@18b4aac2                                                                          
    +-java.net.URLClassLoader@71b2d611                                                                                 
    +-java.net.URLClassLoader@69cd1085                                                                                 
    | +-WebAppClassLoader=266661735@fe4ef67                                                                            
    | | +-com.mycom.sig.foundation.servicediscovery.ExtendedClassLoader@573f7aae                                    
    | +-WebAppClassLoader=Server Initiated@1ccb04b3                                                                    
    | | +-com.mycom.sig.foundation.servicediscovery.ExtendedClassLoader@4b3b9a06                                    
    | | +-jnr.ffi.provider.jffi.AsmClassLoader@73cb9ccb                                                                
    | | +-jnr.ffi.provider.jffi.AsmClassLoader@7c380e94                                                                
    | | +-jnr.ffi.provider.jffi.AsmClassLoader@69ec5d1f                                                                
    | +-WebAppClassLoader=OAuth Server@10d98940                                                                        
    | | +-com.mycom.ece.common.svcfinder.ExtendedClassLoader@3528968e                                               
    | | +-com.mycom.sig.foundation.servicediscovery.ExtendedClassLoader@2919aff3                                    
    | | +-jnr.ffi.provider.jffi.AsmClassLoader@1b0e6bac                                                                
    | | +-jnr.ffi.provider.jffi.AsmClassLoader@2f12d8d1                                                                
    | | +-jnr.ffi.provider.jffi.AsmClassLoader@73123f21                                                                
    | +-WebAppClassLoader=1133988396@43974a2c                                                                          
    |   +-com.mycom.sig.foundation.servicediscovery.ExtendedClassLoader@39d87c5f                                    
    +-java.net.URLClassLoader@1b4c457c                                                                                 
    +-java.net.URLClassLoader@3a477cf5                                                                                 
Affect(row-cnt:24) cost in 31 ms.

[arthas@16908]$ classloader
 name                                                              numberOfInstances  loadedCountTotal                 
 org.eclipse.jetty.webapp.WebAppClassLoader                        4                  24687                            
 BootstrapClassLoader                                              1                  4341                             
 io.opentelemetry.javaagent.bootstrap.AgentClassLoader             1                  3502                             
 com.taobao.arthas.agent.ArthasClassloader                         1                  1430                             
 java.net.URLClassLoader                                           4                  1252                             
 sun.misc.Launcher$AppClassLoader                                  1                  570                              
 sun.reflect.DelegatingClassLoader                                 378                378                              
 sun.misc.Launcher$ExtClassLoader                                  1                  56                               
 jnr.ffi.provider.jffi.AsmClassLoader                              6                  8                                
 com.mycom.sig.foundation.servicediscovery.ExtendedClassLoader  4                  6                                
 com.mycom.ece.common.svcfinder.ExtendedClassLoader             1                  1  
&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;23
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;24
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;25
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;26
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;27
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;28
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;29
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;30
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;31
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;32
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;33
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;34
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;35
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;36
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;37
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;38
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;39
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;40
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;41
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;42
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;43
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;44
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;45
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;46
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;47
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;48
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;49
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;50
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;51
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;52
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;53
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;54
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;55
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;56
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;57
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;58
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;59
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;60
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;61
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;62
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;63
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;arthas&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;@16908&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;jad&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;1ccb04b3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;com&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;mycom&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;jee&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;abc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;client&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;service&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;payload&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;ClientResponse&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;setProjectName&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nl&#34;&gt;ClassLoader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;                                                                                                           
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;WebAppClassLoader&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Server&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Initiated&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;@1ccb04b3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;                                                                          
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;java&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;net&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;URLClassLoader&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;@69cd1085&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;                                                                                   
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sun&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;Launcher$AppClassLoader&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;@18b4aac2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;                                                                        
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sun&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;Launcher$ExtClassLoader&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;@41fa769c&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;                                                                      
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nl&#34;&gt;Location&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;                                                                                                              
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;modules&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DP&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;OAuth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Traffic&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tmp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;server&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;initiated&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;aa&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;war&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;war&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;webapp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;WEB&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;INF&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;clients&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;api&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;19&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;jar&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;            
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;setProjectName&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;                                                                
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;StackTraceElement&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stackTraceElementArray&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;cm&#34;&gt;/*729*/&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Context&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;context&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;                                                                                
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Scope&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;scope&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;               
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;try&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;                                                                                                  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stackTraceElementArray&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Thread&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;currentThread&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;().&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getStackTrace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;                                                                                                                                                          
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;context&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MethodTracer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;tracer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;().&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;startSpan&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ClientResponse&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getMethod&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;setProjectName&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stackTraceElementArray&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Object&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;context&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;scope&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;context&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;makeCurrent&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;catch&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Throwable&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;throwable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;try&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LoggerFactory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getLogger&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ExceptionLogger&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;debug&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Failed to handle exception in instrumentation for com.mycom.jee.abc.client.service.payload.ClientResponse on sun.misc.Launcher$AppClassLoader@18b4aac2&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;thr$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;catch&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Throwable&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;throwable2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stackTraceElementArray&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;projectName&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;try&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;projectName&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;projectName&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stackTraceElementArray&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;catch&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Throwable&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;throwable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// empty catch block&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;try&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;context&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;scope&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;close&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stackTraceElementArray&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MethodTracer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;tracer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;().&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;endExceptionally&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;context&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Throwable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stackTraceElementArray&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Span&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;span&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Span&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;fromContext&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;context&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;span&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;setAttribute&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MethodTracer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;JAVA_METHOD_RETURN&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getKey&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;?&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;null&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Object&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;toString&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MethodTracer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;tracer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;().&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;end&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;context&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;catch&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Throwable&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;throwable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;try&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LoggerFactory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getLogger&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ExceptionLogger&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;debug&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Failed to handle exception in instrumentation for com.mycom.jee.abc.client.service.payload.ClientResponse on sun.misc.Launcher$AppClassLoader@18b4aac2&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;thro&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;catch&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Throwable&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;throwable3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stackTraceElementArray&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;throw&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stackTraceElementArray&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[arthas@16908]$ sc io.opentelemetry.javaagent.instrumentation.methods.MethodInstrumentationModule
io.opentelemetry.javaagent.instrumentation.methods.MethodInstrumentationModule
Affect(row-cnt:1) cost in 54 ms.
[arthas@16908]$ sc -d io.opentelemetry.javaagent.instrumentation.methods.MethodInstrumentationModule
 class-info        io.opentelemetry.javaagent.instrumentation.methods.MethodInstrumentationModule                      
 code-source       /                                                                                                   
 name              io.opentelemetry.javaagent.instrumentation.methods.MethodInstrumentationModule                      
 isInterface       false                                                                                               
 isAnnotation      false                                                                                               
 isEnum            false                                                                                               
 isAnonymousClass  false                                                                                               
 isArray           false                                                                                               
 isLocalClass      false                                                                                               
 isMemberClass     false                                                                                               
 isPrimitive       false                                                                                               
 isSynthetic       false                                                                                               
 simple-name       MethodInstrumentationModule                                                                         
 modifier          public                                                                                              
 annotation                                                                                                            
 interfaces                                                                                                            
 super-class       +-io.opentelemetry.javaagent.tooling.InstrumentationModule                                          
                     +-java.lang.Object                                                                                
 class-loader      +-io.opentelemetry.javaagent.bootstrap.AgentClassLoader@379619aa                                    
 classLoaderHash   379619aa 
&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[arthas@16908]$ sc -d io.opentelemetry.javaagent.instrumentation.methods.MethodTracer
 class-info        io.opentelemetry.javaagent.instrumentation.methods.MethodTracer                                     
 code-source                                                                                                           
 name              io.opentelemetry.javaagent.instrumentation.methods.MethodTracer                                     
 isInterface       false                                                                                               
 isAnnotation      false                                                                                               
 isEnum            false                                                                                               
 isAnonymousClass  false                                                                                               
 isArray           false                                                                                               
 isLocalClass      false                                                                                               
 isMemberClass     false                                                                                               
 isPrimitive       false                                                                                               
 isSynthetic       false                                                                                               
 simple-name       MethodTracer                                                                                        
 modifier          public                                                                                              
 annotation                                                                                                            
 interfaces                                                                                                            
 super-class       +-io.opentelemetry.javaagent.shaded.instrumentation.api.tracer.BaseTracer                           
                     +-java.lang.Object                                                                                
 class-loader      +-WebAppClassLoader=Server Initiated@1ccb04b3                                                       
                     +-java.net.URLClassLoader@69cd1085                                                                
                       +-sun.misc.Launcher$AppClassLoader@18b4aac2                                                     
                         +-sun.misc.Launcher$ExtClassLoader@41fa769c                                                   
 classLoaderHash   1ccb04b3                                                                                            

 class-info        io.opentelemetry.javaagent.instrumentation.methods.MethodTracer                                     
 code-source                                                                                                           
 name              io.opentelemetry.javaagent.instrumentation.methods.MethodTracer                                     
 isInterface       false                                                                                               
 isAnnotation      false                                                                                               
 isEnum            false                                                                                               
 isAnonymousClass  false                                                                                               
 isArray           false                                                                                               
 isLocalClass      false                                                                                               
 isMemberClass     false                                                                                               
 isPrimitive       false                                                                                               
 isSynthetic       false                                                                                               
 simple-name       MethodTracer                                                                                        
 modifier          public                                                                                              
 annotation                                                                                                            
 interfaces                                                                                                            
 super-class       +-io.opentelemetry.javaagent.shaded.instrumentation.api.tracer.BaseTracer                           
                     +-java.lang.Object                                                                                
 class-loader      +-WebAppClassLoader=OAuth Server@10d98940                                                           
                     +-java.net.URLClassLoader@69cd1085                                                                
                       +-sun.misc.Launcher$AppClassLoader@18b4aac2                                                     
                         +-sun.misc.Launcher$ExtClassLoader@41fa769c                                                   
 classLoaderHash   10d98940                                                                                            
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;shaded&#34;&gt;shaded&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;io.opentelemetry.instrumentation.api.config.Config
-&amp;gt;
sc -d io.opentelemetry.javaagent.shaded.instrumentation.api.config.Config

[arthas@16908]$ sc -d io.opentelemetry.javaagent.shaded.instrumentation.api.config.Config                                                                                            

 class-info        io.opentelemetry.javaagent.shaded.instrumentation.api.config.Config                                 
 code-source                                                                                                           
 name              io.opentelemetry.javaagent.shaded.instrumentation.api.config.Config                                 
 isInterface       false                                                                                               
 isAnnotation      false                                                                                               
 isEnum            false                                                                                               
 isAnonymousClass  false                                                                                               
 isArray           false                                                                                               
 isLocalClass      false                                                                                               
 isMemberClass     false                                                                                               
 isPrimitive       false                                                                                               
 isSynthetic       false                                                                                               
 simple-name       Config                                                                                              
 modifier          abstract,public                                                                                     
 annotation                                                                                                            
 interfaces                                                                                                            
 super-class       +-java.lang.Object                                                                                  
 class-loader                                                                                                          
 classLoaderHash   null 
&lt;/code&gt;&lt;/pre&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>java</category>
            
          
            
              <category>opentelemetry</category>
            
          
            
              <category>observability</category>
            
          
            
              <category>cloudnative</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>K8s Custom Resources(CR)</title>
        <link>https://blog.mygraphql.com/zh/notes/cloud/coding-cloud/coding-k8s/custom-resource/</link>
        <pubDate>Sat, 27 Mar 2021 15:12:15 +0900</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sat, 27 Mar 2021 15:12:15 +0900</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/cloud/coding-cloud/coding-k8s/custom-resource/</guid>
        <description>&lt;h2 id=&#34;custom-resource-的入口&#34;&gt;Custom Resource 的入口&lt;/h2&gt;
&lt;p&gt;请求是这样分发到 api 扩展点的：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/cloud/coding-cloud/coding-k8s/custom-resource/index.assets/image-20210327224709520.png&#34; alt=&#34;image-20210327224709520&#34;&gt;&lt;/p&gt;
&lt;p&gt;例如我们有 （Custom Resource）CR&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;apiVersion&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;cnat.programming-kubernetes.info/v1alpha1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;kind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;At&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;metadata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;example-at&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;spec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;schedule&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;2019-07-03T02:00:00Z&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;status&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;phase&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;pending&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;相应的 CustomResourceDefinition (CRD) 会是这样：&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>cloud</category>
            
          
            
              <category>kubernetes-api</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>K8s API 核心对象 —— client-go</title>
        <link>https://blog.mygraphql.com/zh/notes/cloud/coding-cloud/coding-k8s/client-go/</link>
        <pubDate>Fri, 26 Mar 2021 15:12:15 +0900</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Fri, 26 Mar 2021 15:12:15 +0900</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/cloud/coding-cloud/coding-k8s/client-go/</guid>
        <description>&lt;h2 id=&#34;api-入口&#34;&gt;API 入口&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/cloud/coding-cloud/coding-k8s/client-go/client-go-domain.drawio.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Client Sets&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&#34;接收变更通知和缓存informers-and-caching&#34;&gt;接收变更通知和缓存（Informers and Caching）&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Client Sets&lt;/code&gt;可以 watch 变更，但一般我们用更高级的 &lt;code&gt;Informers&lt;/code&gt;，因为它有缓存、索引等功能。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/cloud/coding-cloud/coding-k8s/client-go/index.assets/image-20210326154940269.png&#34; alt=&#34;image-20210326154940269&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Lister ：被应用调用，返回缓存中的数据列表&lt;/li&gt;
&lt;li&gt;Informer：监听器&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Informer 有两个功能&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>cloud</category>
            
          
            
              <category>kubernetes-api</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Helm base</title>
        <link>https://blog.mygraphql.com/zh/notes/cloud/deployment/helm/helm-base/</link>
        <pubDate>Thu, 25 Mar 2021 15:12:15 +0900</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Thu, 25 Mar 2021 15:12:15 +0900</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/cloud/deployment/helm/helm-base/</guid>
        <description>&lt;h2 id=&#34;concept&#34;&gt;Concept&lt;/h2&gt;
&lt;h3 id=&#34;umbrella-chart&#34;&gt;umbrella chart&lt;/h3&gt;
&lt;p&gt;you can also create a chart with dependencies to other charts (a.k.a. umbrella chart) which are completely external using the &lt;code&gt;requirements.yaml&lt;/code&gt; file.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/cloud/deployment/helm/helm-base/index.assets/image-20210325143339901.png&#34; alt=&#34;image-20210325143339901&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;versioning&#34;&gt;versioning&lt;/h3&gt;
&lt;h4 id=&#34;simple-1-1-versioning&#34;&gt;Simple 1-1 versioning&lt;/h4&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/cloud/deployment/helm/helm-base/index.assets/chart-version-single.png&#34; alt=&#34;Synced versions in Helm&#34;&gt;&lt;/p&gt;
&lt;h4 id=&#34;chart-versus-application-versioning&#34;&gt;Chart versus application versioning&lt;/h4&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/cloud/deployment/helm/helm-base/index.assets/chart-version-multiple.png&#34; alt=&#34;Independent Helm versioning&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;参考&#34;&gt;参考&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://codefresh.io/docs/docs/new-helm/helm-best-practices/&#34;&gt;https://codefresh.io/docs/docs/new-helm/helm-best-practices/&lt;/a&gt;&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>cloud</category>
            
          
            
              <category>helm</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Kubernetes extends concept</title>
        <link>https://blog.mygraphql.com/zh/notes/cloud/coding-cloud/coding-k8s/k8s-extends-concept/</link>
        <pubDate>Thu, 25 Mar 2021 15:12:15 +0900</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Thu, 25 Mar 2021 15:12:15 +0900</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/cloud/coding-cloud/coding-k8s/k8s-extends-concept/</guid>
        <description>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;最近由于工作需要，重新系统回顾 Kubernetes 的编程。发现《Programming Kubernetes》这书写得比较系统。于是边学，边记录一些重点。&lt;/p&gt;
&lt;h2 id=&#34;controller&#34;&gt;Controller&lt;/h2&gt;
&lt;h3 id=&#34;controller-loop&#34;&gt;Controller Loop&lt;/h3&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/cloud/coding-cloud/coding-k8s/k8s-extends-concept/index.assets/image-20210325162149792.png&#34; alt=&#34;image-20210325162149792&#34;&gt;&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>cloud</category>
            
          
            
              <category>kubernetes-programming</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Kubernetes 自动扩缩容</title>
        <link>https://blog.mygraphql.com/zh/notes/cloud/k8s/hpa/</link>
        <pubDate>Tue, 23 Mar 2021 15:12:15 +0900</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Tue, 23 Mar 2021 15:12:15 +0900</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/cloud/k8s/hpa/</guid>
        <description>&lt;p&gt;本文状态：草稿&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/cloud/k8s/hpa/index.assets/image-20210323153341945.png&#34; alt=&#34;image-20210323153341945&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;配置例子&#34;&gt;配置例子&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;apiVersion&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;autoscaling/v2beta2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;kind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;HorizontalPodAutoscaler&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;metadata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;php-apache&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;spec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;scaleTargetRef&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;apiVersion&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;apps/v1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;kind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Deployment&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;php-apache&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;minReplicas&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;maxReplicas&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;metrics&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Resource&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;resource&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;cpu&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;target&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Utilization&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;averageUtilization&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;50&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;算法&#34;&gt;算法&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;desiredReplicas = ceil[currentReplicas * ( currentMetricValue / desiredMetricValue )]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;currentMetricValue 为相关 pod 的 metric 平均数。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>cloud</category>
            
          
            
              <category>kubenetes</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>内核同步原语</title>
        <link>https://blog.mygraphql.com/zh/notes/low-tec/kernel/5-sync/synchronizeation-primitives/</link>
        <pubDate>Sun, 21 Mar 2021 15:12:15 +0900</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sun, 21 Mar 2021 15:12:15 +0900</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/low-tec/kernel/5-sync/synchronizeation-primitives/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://blog.mygraphql.com/zh/notes/low-tec/kernel/5-sync/synchronizeation-primitives/index.assets/image-20210321163632623.png&#34; alt=&#34;image-20210321163632623&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;什么是同步原语&#34;&gt;什么是同步原语&lt;/h2&gt;
&lt;p&gt;共享内存，多进程/线程的运行期设计模式已成主流的今天，你有好奇一下，进程/线程间的怎么同步的吗？大部分人知道，我们用的开发语言，或类库函数库，已经提供了看起来很漂亮的封装。然而在漂亮的面子工程后面，大部分归根到底是要内核 或/和 CPU 硬件去完成这些同步的。而反过来，只要我们理解了内部原理，你就可以快速理解那些漂亮的面子工程，和他们可能的性能问题，进而选择一个适合你的“面子工程”。而这些内部原理，就是同步原语。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>kernel</category>
            
          
            
              <category>sync</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Istio Canary（金丝雀） 上线</title>
        <link>https://blog.mygraphql.com/zh/notes/cloud/istio/canary/</link>
        <pubDate>Sat, 20 Mar 2021 15:12:15 +0900</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Sat, 20 Mar 2021 15:12:15 +0900</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/cloud/istio/canary/</guid>
        <description>&lt;h3 id=&#34;按比例分配分配新旧版本流量&#34;&gt;按比例分配分配新旧版本流量&lt;/h3&gt;
&lt;p&gt;VirtualService:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;apiVersion&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;networking.istio.io/v1alpha3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;kind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;VirtualService&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;metadata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;reviews&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;spec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;hosts&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;reviews&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;http&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;route&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;destination&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;host&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;reviews&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;subset&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;v1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;weight&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;75&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;destination&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;host&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;reviews&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;subset&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;v2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;weight&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;25&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;DestinationRule :&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;apiVersion&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;networking.istio.io/v1alpha3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;kind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;DestinationRule&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;metadata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;bookinfo-ratings&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;spec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;host&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;reviews&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;trafficPolicy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;loadBalancer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;simple&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;LEAST_CONN&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;subsets&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;v1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;labels&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;v1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;trafficPolicy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;loadBalancer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;simple&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;ROUND_ROBIN&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;v2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;labels&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;v2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;trafficPolicy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;loadBalancer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;simple&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;ROUND_ROBIN&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;根据请求源-pod-的-label-路由&#34;&gt;根据请求源 pod 的 label 路由&lt;/h3&gt;
&lt;p&gt;使用 &lt;code&gt;sourceLabels&lt;/code&gt; 规则，可以根据源 pod 的 label 进行路由。这里用了 &lt;code&gt;version&lt;/code&gt; 这个 label。即根据pod的应用版本进行路由。&lt;br /&gt;
这样的路由规则实际是使用于发起调用方的 sidecar。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>cloud</category>
            
          
            
              <category>istio</category>
            
          
            
              <category>canary</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>系统级跟踪 eBPF 工具 —— bpftrace 入门</title>
        <link>https://blog.mygraphql.com/zh/notes/low-tec/trace/bpftrace/</link>
        <pubDate>Mon, 08 Mar 2021 15:12:15 +0900</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Mon, 08 Mar 2021 15:12:15 +0900</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/low-tec/trace/bpftrace/</guid>
        <description>&lt;h2 id=&#34;bpftrace-简介&#34;&gt;bpftrace 简介&lt;/h2&gt;
&lt;h2 id=&#34;bpftrace-简单使用&#34;&gt;bpftrace 简单使用&lt;/h2&gt;
&lt;h4 id=&#34;查询可以跟踪的内核函数以-sleep-为关键字&#34;&gt;查询可以跟踪的内核函数，以 sleep 为关键字&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ bpftrace -l &lt;span class=&#34;s1&#34;&gt;&amp;#39;*open*&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tracepoint:syscalls:sys_exit_open_tree
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tracepoint:syscalls:sys_enter_open
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kprobe:vfs_open
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kprobe:tcp_try_fastopen
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id=&#34;跟踪所有-sys_enter_open-系统调用&#34;&gt;跟踪所有 sys_enter_open() 系统调用&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ bpftrace -e &lt;span class=&#34;s1&#34;&gt;&amp;#39;tracepoint:syscalls:sys_enter_open{ printf(&amp;#34;%s %s\n&amp;#34;, comm,str(args-&amp;gt;filename)); }&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep vi
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;然后在另外一个终端中&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ vi /etc/hosts
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;可以看到在 bpftrace 终端中输出：&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>trace</category>
            
          
            
              <category>kernel</category>
            
          
            
              <category>ebpf</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Kernel - Page Frame 回收</title>
        <link>https://blog.mygraphql.com/zh/notes/low-tec/kernel/17-page-frame-reclaiming/</link>
        <pubDate>Tue, 02 Mar 2021 15:12:15 +0900</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Tue, 02 Mar 2021 15:12:15 +0900</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/low-tec/kernel/17-page-frame-reclaiming/</guid>
        <description>&lt;blockquote&gt;
&lt;p&gt;From [Understanding The Linux Kernel]&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2 id=&#34;page-frame-回收&#34;&gt;Page Frame 回收&lt;/h2&gt;
&lt;p&gt;之前我们了解到，Linux 倾向用最多的内存做 Page Cache。这使我们不得不考虑如何在内存不足前回收内存。问题是，回收内存的程序本身也可能有 IO 操作，也可能需要内存。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>kernel</category>
            
          
            
              <category>kernel-mem</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Kernel - Pagecache</title>
        <link>https://blog.mygraphql.com/zh/notes/low-tec/kernel/pagecache/pagecache-intro/</link>
        <pubDate>Fri, 26 Feb 2021 15:12:15 +0900</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Fri, 26 Feb 2021 15:12:15 +0900</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/low-tec/kernel/pagecache/pagecache-intro/</guid>
        <description>&lt;h2 id=&#34;简介&#34;&gt;简介&lt;/h2&gt;
&lt;h3 id=&#34;page-cache-存放的数据的类型&#34;&gt;page cache 存放的数据的类型&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;普通的文件&lt;/li&gt;
&lt;li&gt;目录数据&lt;/li&gt;
&lt;li&gt;直接读取自 block device file 的数据&lt;/li&gt;
&lt;li&gt;已经被swap out的用户进程内存的数据（可以强制内核在page cahce中保留一些已经被swap out的数据）&lt;/li&gt;
&lt;li&gt;归属于一些特殊 filesystem 的内存 page，如用于进程间通讯的 shm filesystem&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;page-cache-的标识体系&#34;&gt;page cache 的标识体系&lt;/h3&gt;
&lt;p&gt;page cache 中的每个 page 均归属于文件. 这个文件 — 或更精确来说，是文件的 inode 被称为 page 的&lt;code&gt;owner&lt;/code&gt;.&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>kernel</category>
            
          
            
              <category>pagecache</category>
            
          
        
        
        
      </item>
      
      <item>
        <title>Kernel - Pagecache - Core</title>
        <link>https://blog.mygraphql.com/zh/notes/low-tec/kernel/pagecache/pagecache-core/</link>
        <pubDate>Fri, 26 Feb 2021 15:12:15 +0900</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        <atom:modified>Fri, 26 Feb 2021 15:12:15 +0900</atom:modified>
        <guid>https://blog.mygraphql.com/zh/notes/low-tec/kernel/pagecache/pagecache-core/</guid>
        <description>&lt;h2 id=&#34;address_space-数据结构&#34;&gt;address_space 数据结构&lt;/h2&gt;
&lt;p&gt;Page cahce 的核心数据结构是 &lt;code&gt;addrees_space&lt;/code&gt;。一般来说，每个 &lt;code&gt;inode&lt;/code&gt; （Kernel 用来存放文件元信息的内存中的数据结构，可以视为一个文件的描述信息）中包含一个 &lt;code&gt;addrees_space&lt;/code&gt; 。&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
          
            
              <category>kernel</category>
            
          
            
              <category>pagecache</category>
            
          
        
        
        
      </item>
      
      <item>
        <title></title>
        <link>https://blog.mygraphql.com/zh/notes/blogging/translate-md/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        
        <guid>https://blog.mygraphql.com/zh/notes/blogging/translate-md/</guid>
        <description>&lt;p&gt;$ pip install md-translate&lt;/p&gt;
&lt;p&gt;export&lt;/p&gt;
&lt;p&gt;md-translate -s Google -S en -T zh-CN ./java-native-mem.md&lt;/p&gt;
&lt;h3 id=&#34;ref&#34;&gt;Ref&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/ilyachch/md_docs-trans-app&#34;&gt;https://github.com/ilyachch/md_docs-trans-app&lt;/a&gt;&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
        
        
      </item>
      
      <item>
        <title></title>
        <link>https://blog.mygraphql.com/zh/notes/cc/vtable/vtable-multiple-inheritance/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        
        <guid>https://blog.mygraphql.com/zh/notes/cc/vtable/vtable-multiple-inheritance/</guid>
        <description>&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://shaharmike.com/cpp/vtable-part2/&#34;&gt;https://shaharmike.com/cpp/vtable-part2/&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
        
        
      </item>
      
      <item>
        <title></title>
        <link>https://blog.mygraphql.com/zh/notes/cc/vtable/vtable/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        
        <guid>https://blog.mygraphql.com/zh/notes/cc/vtable/vtable/</guid>
        <description>&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://tenzir.com/blog/production-debugging-bpftrace-uprobes/&#34;&gt;https://tenzir.com/blog/production-debugging-bpftrace-uprobes/&lt;/a&gt;&lt;br /&gt;
&lt;a href=&#34;https://shaharmike.com/cpp/vtable-part1/&#34;&gt;https://shaharmike.com/cpp/vtable-part1/&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Parent&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;virtual&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Foo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;virtual&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;FooNotOverridden&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Derived&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Parent&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Foo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;override&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;Parent&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;p1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;p2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;Derived&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;d1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;d2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;done&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;endl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-gdb&#34; data-lang=&#34;gdb&#34;&gt;$ # compile our code with debug symbols and start debugging using gdb
$ clang++ -std=c++14 -stdlib=libc++ -g main.cpp &amp;amp;&amp;amp; gdb ./a.out
...
(gdb) # ask gdb to automatically demangle C++ symbols
(gdb) set print asm-demangle on
(gdb) set print demangle on
(gdb) # set breakpoint at main
(gdb) b main
Breakpoint 1 at 0x4009ac: file main.cpp, line 15.
(gdb) run
Starting program: /home/shmike/cpp/a.out

Breakpoint 1, main () at main.cpp:15
15	  Parent p1, p2;
(gdb) # skip to next line
(gdb) n
16	  Derived d1, d2;
(gdb) # skip to next line
(gdb) n
18	  std::cout &amp;lt;&amp;lt; &amp;#34;done&amp;#34; &amp;lt;&amp;lt; std::endl;
(gdb) # print p1, p2, d1, d2 - we&amp;#39;ll talk about what the output means soon
(gdb) p p1
$1 = {_vptr$Parent = 0x400bb8 &amp;lt;vtable for Parent+16&amp;gt;}
(gdb) p p2
$2 = {_vptr$Parent = 0x400bb8 &amp;lt;vtable for Parent+16&amp;gt;}
(gdb) p d1
$3 = {&amp;lt;Parent&amp;gt; = {_vptr$Parent = 0x400b50 &amp;lt;vtable for Derived+16&amp;gt;}, &amp;lt;No data fields&amp;gt;}
(gdb) p d2
$4 = {&amp;lt;Parent&amp;gt; = {_vptr$Parent = 0x400b50 &amp;lt;vtable for Derived+16&amp;gt;}, &amp;lt;No data fields&amp;gt;}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Here&amp;rsquo;s what we learned from the above:&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
        
        
      </item>
      
      <item>
        <title></title>
        <link>https://blog.mygraphql.com/zh/notes/cloud/cloud-schedule/cloud-schedule/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        
        <guid>https://blog.mygraphql.com/zh/notes/cloud/cloud-schedule/cloud-schedule/</guid>
        <description>&lt;p&gt;&lt;a href=&#34;https://netflixtechblog.com/predictive-cpu-isolation-of-containers-at-netflix-91f014d856c7&#34;&gt;https://netflixtechblog.com/predictive-cpu-isolation-of-containers-at-netflix-91f014d856c7&lt;/a&gt;&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
        
        
      </item>
      
      <item>
        <title></title>
        <link>https://blog.mygraphql.com/zh/notes/cloud/envoy/arch/envoy-arch-lizanzhou/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        
        <guid>https://blog.mygraphql.com/zh/notes/cloud/envoy/arch/envoy-arch-lizanzhou/</guid>
        <description>&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=spzfupads2o#fromHistory&#34;&gt;https://www.youtube.com/watch?v=spzfupads2o#fromHistory&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&#34;envoy-arch-LizanZhou.assets/image-20220216151221665.png&#34; alt=&#34;image-20220216151221665&#34;&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=gQF23Vw0keg&#34;&gt;Envoy Internals Deep Dive - Matt Klein, Lyft&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&#34;envoy-arch-LizanZhou.assets/image-20220216152032971.png&#34; alt=&#34;image-20220216152032971&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;envoy-arch-LizanZhou.assets/image-20220216152340261.png&#34; alt=&#34;image-20220216152340261&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;envoy-arch-LizanZhou.assets/image-20220216152456366.png&#34; alt=&#34;image-20220216152456366&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;envoy-arch-LizanZhou.assets/image-20220216152839665.png&#34; alt=&#34;image-20220216152839665&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;envoy-arch-LizanZhou.assets/image-20220216153102003.png&#34; alt=&#34;image-20220216153102003&#34;&gt;&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
        
        
      </item>
      
      <item>
        <title></title>
        <link>https://blog.mygraphql.com/zh/notes/cloud/envoy/arch/envoy-arch/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        
        <guid>https://blog.mygraphql.com/zh/notes/cloud/envoy/arch/envoy-arch/</guid>
        <description>&lt;h2 id=&#34;terminology&#34;&gt;Terminology&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;Cluster&lt;/em&gt;: a logical service &lt;strong&gt;with a set of endpoints&lt;/strong&gt; that Envoy forwards requests to.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;Downstream&lt;/em&gt;: an entity connecting to Envoy. This &lt;strong&gt;may be a local application (in a sidecar model&lt;/strong&gt;) or a network node. In non-sidecar models, this is a remote client.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;Endpoints&lt;/em&gt;: network nodes that implement a logical service. &lt;strong&gt;They are grouped into clusters&lt;/strong&gt;. Endpoints in a cluster are &lt;em&gt;&lt;code&gt;upstream&lt;/code&gt;&lt;/em&gt; of an Envoy proxy.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;Filter&lt;/em&gt;: a module in the connection or request processing pipeline providing some aspect of request handling. An analogy from Unix is the composition of small utilities (filters) with Unix pipes (filter chains).&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
        
        
      </item>
      
      <item>
        <title></title>
        <link>https://blog.mygraphql.com/zh/notes/cloud/envoy/envoy-dev/envoy-conn-balance/envoy-conn-balance/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        
        <guid>https://blog.mygraphql.com/zh/notes/cloud/envoy/envoy-dev/envoy-conn-balance/envoy-conn-balance/</guid>
        <description></description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
        
        
      </item>
      
      <item>
        <title></title>
        <link>https://blog.mygraphql.com/zh/notes/cloud/envoy/envoy-dev/envoy-dev/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        
        <guid>https://blog.mygraphql.com/zh/notes/cloud/envoy/envoy-dev/envoy-dev/</guid>
        <description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;tcmalloc，通过-define tcmalloc=disabled禁用
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;https://blog.gmem.cc/envoy-study-note&#34;&gt;https://blog.gmem.cc/envoy-study-note&lt;/a&gt;&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
        
        
      </item>
      
      <item>
        <title></title>
        <link>https://blog.mygraphql.com/zh/notes/cloud/envoy/envoy-dev/envoy-event-model/envoy-event-model/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        
        <guid>https://blog.mygraphql.com/zh/notes/cloud/envoy/envoy-dev/envoy-event-model/envoy-event-model/</guid>
        <description>&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://istio.cn/t/topic/299&#34;&gt;https://istio.cn/t/topic/299&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://developer.aliyun.com/article/659277&#34;&gt;Envoy源码分析之Dispatcher：https://developer.aliyun.com/article/659277&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;线程相关 Misc：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Envoy进程由一个Main Thread和多个Worker Thread 组成&lt;/li&gt;
&lt;li&gt;每个Main和Worker包含一个eventloop，所有的处理都是由eventloop触发开始&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Main负责xDS等功能，Worker负责处理连接和请求&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;当一个client向Envoy建立连接的时候，因为所有Worker的EventLoop都注册了listening fd(启用SO_PORTREUSE除外)，会由内核决定分配给哪个Worker&lt;/li&gt;
&lt;li&gt;当一个下游client连接到了Envoy，在保持连接不断的情况下，会和同一个Worker进行通讯&lt;/li&gt;
&lt;/ul&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
        
        
      </item>
      
      <item>
        <title></title>
        <link>https://blog.mygraphql.com/zh/notes/cloud/envoy/httpprotocoloptions/envoy-header-case/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        
        <guid>https://blog.mygraphql.com/zh/notes/cloud/envoy/httpprotocoloptions/envoy-header-case/</guid>
        <description>&lt;h2 id=&#34;http11-header-casing&#34;&gt;HTTP/1.1 Header Casing&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_conn_man/header_casing#config-http-conn-man-header-casing&#34;&gt;https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_conn_man/header_casing#config-http-conn-man-header-casing&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;When handling HTTP/1.1, Envoy will normalize the header keys to be all lowercase. While this is compliant with the HTTP/1.1 spec, in practice this can result in issues when migrating existing systems that might rely on specific header casing.&lt;/p&gt;
&lt;p&gt;To support these use cases, Envoy allows configuring a formatting scheme for the headers, which will have Envoy transform the header keys during serialization.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;To configure this formatting on response headers, specify the format in the &lt;code&gt;http_protocol_options&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;To configure this for upstream request headers, specify the formatting in &lt;code&gt;http_protocol_options&lt;/code&gt; in the cluster’s &lt;code&gt;extension_protocol_options&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Currently Envoy supports two mutually exclusive types of header key formatters:&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
        
        
      </item>
      
      <item>
        <title></title>
        <link>https://blog.mygraphql.com/zh/notes/cloud/envoy/httpprotocoloptions/http1protocoloptions/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        
        <guid>https://blog.mygraphql.com/zh/notes/cloud/envoy/httpprotocoloptions/http1protocoloptions/</guid>
        <description>&lt;h3 id=&#34;configcorev3http1protocoloptions&#34;&gt;config.core.v3.Http1ProtocolOptions&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/core/v3/protocol.proto#config-core-v3-http1protocoloptions&#34;&gt;https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/core/v3/protocol.proto#config-core-v3-http1protocoloptions&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;[config.core.v3.Http1ProtocolOptions proto]&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;allow_absolute_url&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;{...}&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;accept_http_10&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;...&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;default_host_for_http_10&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;...&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;header_key_format&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;{...}&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;enable_trailers&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;...&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;allow_chunked_length&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;...&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;override_stream_error_on_invalid_http_message&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;{...}&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;allow_absolute_url&lt;/p&gt;
&lt;p&gt;(BoolValue) Handle HTTP requests with absolute URLs in the requests. These requests are generally sent by clients to forward/explicit proxies. This allows clients to configure envoy as their HTTP proxy. In Unix, for example, this is typically done by setting the http_proxy environment variable.&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
        
        
      </item>
      
      <item>
        <title></title>
        <link>https://blog.mygraphql.com/zh/notes/cloud/envoy/log/debug-log/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        
        <guid>https://blog.mygraphql.com/zh/notes/cloud/envoy/log/debug-log/</guid>
        <description>&lt;h3 id=&#34;enable-debug-log-by-command-line&#34;&gt;Enable debug log by command line&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://projectcontour.io/docs/v1.10.0/troubleshooting/envoy-debug-log/&#34;&gt;https://projectcontour.io/docs/v1.10.0/troubleshooting/envoy-debug-log/&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;The &lt;code&gt;envoy&lt;/code&gt; command has a &lt;code&gt;--log-level&lt;/code&gt; &lt;a href=&#34;https://www.envoyproxy.io/docs/envoy/latest/operations/cli&#34;&gt;flag&lt;/a&gt; that can be useful for debugging. By default, it&amp;rsquo;s set to &lt;code&gt;info&lt;/code&gt;. To change it to &lt;code&gt;debug&lt;/code&gt;, edit the &lt;code&gt;envoy&lt;/code&gt; DaemonSet in the &lt;code&gt;projectcontour&lt;/code&gt; namespace and replace the &lt;code&gt;--log-level info&lt;/code&gt; flag with &lt;code&gt;--log-level debug&lt;/code&gt;. Setting the Envoy log level to &lt;code&gt;debug&lt;/code&gt; can be particilarly useful for debugging TLS connection failures.&lt;/p&gt;
&lt;h3 id=&#34;enable-debug-log-by-api&#34;&gt;Enable debug log by API&lt;/h3&gt;
&lt;p&gt;列出 logger 名字：&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
        
        
      </item>
      
      <item>
        <title></title>
        <link>https://blog.mygraphql.com/zh/notes/cloud/envoy/stats/os_event_stats/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        
        <guid>https://blog.mygraphql.com/zh/notes/cloud/envoy/stats/os_event_stats/</guid>
        <description>&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://www.envoyproxy.io/docs/envoy/latest/operations/performance&#34;&gt;https://www.envoyproxy.io/docs/envoy/latest/operations/performance&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;h1 id=&#34;performance&#34;&gt;Performance&lt;a href=&#34;https://www.envoyproxy.io/docs/envoy/latest/operations/performance#performance&#34; title=&#34;Permalink to this headline&#34;&gt;¶&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Envoy is architected to optimize scalability and resource utilization by running an event loop on a &lt;a href=&#34;https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/intro/threading_model#arch-overview-threading&#34;&gt;small number of threads&lt;/a&gt;. The “main” thread is responsible for control plane processing, and each “worker” thread handles a portion of the data plane processing. Envoy exposes two statistics to monitor performance of the event loops on all these threads.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Loop duration:&lt;/strong&gt; Some amount of processing is done on each iteration of the event loop. This amount will naturally vary with changes in load. However, if one or more threads have an unusually long-tailed loop duration, it may indicate a performance issue. For example, work might not be distributed fairly across the worker threads, or there may be a long blocking operation in an extension that’s impeding progress.&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
        
        
      </item>
      
      <item>
        <title></title>
        <link>https://blog.mygraphql.com/zh/notes/cloud/envoy/thread-balance/kernel-reuse-port/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        
        <guid>https://blog.mygraphql.com/zh/notes/cloud/envoy/thread-balance/kernel-reuse-port/</guid>
        <description>&lt;h2 id=&#34;kernel&#34;&gt;Kernel&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://lwn.net/Articles/542629/&#34;&gt;https://lwn.net/Articles/542629/&lt;/a&gt;&lt;br /&gt;
One of the features merged in the 3.9 development cycle was TCP and UDP support for the SO_REUSEPORT socket option; that support was implemented in a series of patches by Tom Herbert. The new socket option allows multiple sockets on the same host to bind to the same port, and is intended to improve the performance of multithreaded network server applications running on top of multicore systems.&lt;br /&gt;
The basic concept of SO_REUSEPORT is simple enough. Multiple servers (processes or threads) can bind to the same port if they each set the option as follows:&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
        
        
      </item>
      
      <item>
        <title></title>
        <link>https://blog.mygraphql.com/zh/notes/cloud/envoy/upstream/conn-pool/envoy-conn-pool/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        
        <guid>https://blog.mygraphql.com/zh/notes/cloud/envoy/upstream/conn-pool/envoy-conn-pool/</guid>
        <description>&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/connection_pooling#automatic-protocol-selection&#34;&gt;https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/connection_pooling#automatic-protocol-selection&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;h1 id=&#34;connection-pooling&#34;&gt;Connection pooling&lt;/h1&gt;
&lt;p&gt;For HTTP traffic, Envoy supports abstract connection pools that are layered on top of the underlying wire protocol (HTTP/1.1, HTTP/2, HTTP/3). The utilizing filter code does not need to be aware of whether the underlying protocol supports true multiplexing or not. In practice the underlying implementations have the following high level properties:&lt;/p&gt;
&lt;h2 id=&#34;http11&#34;&gt;HTTP/1.1&lt;/h2&gt;
&lt;p&gt;The HTTP/1.1 connection pool acquires connections as needed to an upstream host (up to the circuit breaking limit). Requests are bound to connections as they become available, either because a connection is done processing a previous request or because a new connection is ready to receive its first request. The HTTP/1.1 connection pool does not make use of pipelining so that only a single downstream request must be reset if the upstream connection is severed.&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
        
        
      </item>
      
      <item>
        <title></title>
        <link>https://blog.mygraphql.com/zh/notes/cloud/envoy/upstream/envoy-http2/envoy-http2/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        
        <guid>https://blog.mygraphql.com/zh/notes/cloud/envoy/upstream/envoy-http2/envoy-http2/</guid>
        <description>&lt;h3 id=&#34;tls-alpn&#34;&gt;TLS ALPN&lt;/h3&gt;
&lt;h4 id=&#34;force-http-11&#34;&gt;Force HTTP 1.1&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://www.tetrate.io/blog/envoy-and-istio-security-releases-june-2020/&#34;&gt;https://www.tetrate.io/blog/envoy-and-istio-security-releases-june-2020/&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Envoy versions can mitigate those vulnerabilities by disabling HTTP2 and allowing only HTTP/1.1 by setting &lt;code&gt;http_connection_manager.codec_type&lt;/code&gt; to “&lt;code&gt;HTTP1&lt;/code&gt;” and removing “&lt;code&gt;h2&lt;/code&gt;” from &lt;code&gt;common_tls_context.alpn_protocols&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;For Istio:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;23
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;apiVersion&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;networking.istio.io/v1alpha3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;kind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;EnvoyFilter&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;metadata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;disable-ingress-h2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;namespace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;istio-system&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;spec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;workloadSelector&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;labels&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;istio&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;ingressgateway&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;configPatches&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;applyTo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;NETWORK_FILTER&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# http connection manager is a filter in Envoy&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;match&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;context&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;GATEWAY&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;listener&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;filterChain&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;envoy.http_connection_manager&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;patch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;operation&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;MERGE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;typed_config&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;#34;@type&amp;#34;: &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;type.googleapis.com/envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;codec_type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;HTTP1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;http-11-upgrade-header&#34;&gt;HTTP 1.1 Upgrade header&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/http/upgrades#http-upgrades&#34;&gt;https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/http/upgrades#http-upgrades&lt;/a&gt;&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
        
        
      </item>
      
      <item>
        <title></title>
        <link>https://blog.mygraphql.com/zh/notes/cloud/envoy/upstream/protocol-selection/protocol-selection/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        
        <guid>https://blog.mygraphql.com/zh/notes/cloud/envoy/upstream/protocol-selection/protocol-selection/</guid>
        <description>&lt;h1 id=&#34;http-protocol-options&#34;&gt;HTTP Protocol Options&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/upstreams/http/v3/http_protocol_options.proto#extensions-upstreams-http-v3-httpprotocoloptions-autohttpconfig&#34;&gt;https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/upstreams/http/v3/http_protocol_options.proto#extensions-upstreams-http-v3-httpprotocoloptions-autohttpconfig&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;This extension may be referenced by the qualified name &lt;code&gt;envoy.upstreams.http.http_protocol_options&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&#34;extensionsupstreamshttpv3httpprotocoloptions&#34;&gt;extensions.upstreams.http.v3.HttpProtocolOptions&lt;/h2&gt;
&lt;p&gt;HttpProtocolOptions specifies Http upstream protocol options. This object is used in typed_extension_protocol_options, keyed by the name envoy.extensions.upstreams.http.v3.HttpProtocolOptions.&lt;/p&gt;
&lt;p&gt;This controls what protocol(s) should be used for upstream and how said protocol(s) are configured.&lt;/p&gt;
&lt;p&gt;This replaces the prior pattern of explicit protocol configuration directly in the cluster. So a configuration like this, explicitly configuring the use of HTTP/2 upstream:&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
        
        
      </item>
      
      <item>
        <title></title>
        <link>https://blog.mygraphql.com/zh/notes/cloud/filesystem/overlay-fs/overlay-fs/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        
        <guid>https://blog.mygraphql.com/zh/notes/cloud/filesystem/overlay-fs/overlay-fs/</guid>
        <description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
        
        
      </item>
      
      <item>
        <title></title>
        <link>https://blog.mygraphql.com/zh/notes/cloud/helm/chart/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        
        <guid>https://blog.mygraphql.com/zh/notes/cloud/helm/chart/</guid>
        <description>&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://helm.sh/docs/topics/charts/&#34;&gt;https://helm.sh/docs/topics/charts/&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;h1 id=&#34;chart&#34;&gt;Chart&lt;/h1&gt;
&lt;p&gt;A Chart is a Helm package. It contains all of the resource definitions necessary to run an application, tool, or service inside of a Kubernetes cluster. Think of it like the Kubernetes equivalent of a Homebrew formula, an Apt dpkg, or a Yum RPM file.&lt;/p&gt;
&lt;h4 id=&#34;directory-structure&#34;&gt;Directory structure&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-conf&#34; data-lang=&#34;conf&#34;&gt;wordpress/
  Chart.yaml          # A YAML file containing information about the chart
  LICENSE             # OPTIONAL: A plain text file containing the license for the chart
  README.md           # OPTIONAL: A human-readable README file
  values.yaml         # The default configuration values for this chart
  values.schema.json  # OPTIONAL: A JSON Schema for imposing a structure on the values.yaml file
  charts/             # A directory containing any charts upon which this chart depends.
  crds/               # Custom Resource Definitions
  templates/          # A directory of templates that, when combined with values,
                      # will generate valid Kubernetes manifest files.
  templates/NOTES.txt # OPTIONAL: A plain text file containing short usage notes
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Pull:&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
        
        
      </item>
      
      <item>
        <title></title>
        <link>https://blog.mygraphql.com/zh/notes/cloud/helm/create-package/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        
        <guid>https://blog.mygraphql.com/zh/notes/cloud/helm/create-package/</guid>
        <description>&lt;p&gt;As you edit your chart, you can validate that it is well-formed by running &lt;code&gt;helm lint&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;When it&amp;rsquo;s time to package the chart up for distribution, you can run the &lt;code&gt;helm package&lt;/code&gt; command:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ helm package deis-workflow
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deis-workflow-0.1.0.tgz
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
        
        
      </item>
      
      <item>
        <title></title>
        <link>https://blog.mygraphql.com/zh/notes/cloud/helm/helm-concept/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        
        <guid>https://blog.mygraphql.com/zh/notes/cloud/helm/helm-concept/</guid>
        <description>&lt;p&gt;Helm installs &lt;em&gt;charts&lt;/em&gt; into Kubernetes, creating a new &lt;em&gt;release&lt;/em&gt; for each installation. And to find new charts, you can search Helm chart &lt;em&gt;repositories&lt;/em&gt;.&lt;/p&gt;
&lt;h3 id=&#34;helm-chart-repository&#34;&gt;Helm Chart Repository&lt;/h3&gt;
&lt;p&gt;A Repository is the place where charts can be collected and shared. It&amp;rsquo;s like Perl&amp;rsquo;s CPAN archive or the Fedora Package Database, but for Kubernetes packages.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;helm repo add bitnami https://charts.bitnami.com/bitnami
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ helm search repo bitnami
NAME                             	CHART VERSION	APP VERSION  	DESCRIPTION
bitnami/bitnami-common           	0.0.9        	0.0.9        	DEPRECATED Chart with custom templates used in ...
bitnami/airflow                  	8.0.2        	2.0.0        	Apache Airflow is a platform to programmaticall...
bitnami/apache                   	8.2.3        	2.4.46       	Chart for Apache HTTP Server
bitnami/aspnet-core              	1.2.3        	3.1.9        	ASP.NET Core is an open-source framework create...
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;chart&#34;&gt;Chart&lt;/h3&gt;
&lt;p&gt;A Chart is a Helm package. It contains all of the resource definitions necessary to run an application, tool, or service inside of a Kubernetes cluster. Think of it like the Kubernetes equivalent of a Homebrew formula, an Apt dpkg, or a Yum RPM file.&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
        
        
      </item>
      
      <item>
        <title></title>
        <link>https://blog.mygraphql.com/zh/notes/cloud/helm/helm-install/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        
        <guid>https://blog.mygraphql.com/zh/notes/cloud/helm/helm-install/</guid>
        <description>&lt;p&gt;Helm installs resources in the following order:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Namespace&lt;/li&gt;
&lt;li&gt;NetworkPolicy&lt;/li&gt;
&lt;li&gt;ResourceQuota&lt;/li&gt;
&lt;li&gt;LimitRange&lt;/li&gt;
&lt;li&gt;PodSecurityPolicy&lt;/li&gt;
&lt;li&gt;PodDisruptionBudget&lt;/li&gt;
&lt;li&gt;ServiceAccount&lt;/li&gt;
&lt;li&gt;Secret&lt;/li&gt;
&lt;li&gt;SecretList&lt;/li&gt;
&lt;li&gt;ConfigMap&lt;/li&gt;
&lt;li&gt;StorageClass&lt;/li&gt;
&lt;li&gt;PersistentVolume&lt;/li&gt;
&lt;li&gt;PersistentVolumeClaim&lt;/li&gt;
&lt;li&gt;CustomResourceDefinition&lt;/li&gt;
&lt;li&gt;ClusterRole&lt;/li&gt;
&lt;li&gt;ClusterRoleList&lt;/li&gt;
&lt;li&gt;ClusterRoleBinding&lt;/li&gt;
&lt;li&gt;ClusterRoleBindingList&lt;/li&gt;
&lt;li&gt;Role&lt;/li&gt;
&lt;li&gt;RoleList&lt;/li&gt;
&lt;li&gt;RoleBinding&lt;/li&gt;
&lt;li&gt;RoleBindingList&lt;/li&gt;
&lt;li&gt;Service&lt;/li&gt;
&lt;li&gt;DaemonSet&lt;/li&gt;
&lt;li&gt;Pod&lt;/li&gt;
&lt;li&gt;ReplicationController&lt;/li&gt;
&lt;li&gt;ReplicaSet&lt;/li&gt;
&lt;li&gt;Deployment&lt;/li&gt;
&lt;li&gt;HorizontalPodAutoscaler&lt;/li&gt;
&lt;li&gt;StatefulSet&lt;/li&gt;
&lt;li&gt;Job&lt;/li&gt;
&lt;li&gt;CronJob&lt;/li&gt;
&lt;li&gt;Ingress&lt;/li&gt;
&lt;li&gt;APIService&lt;/li&gt;
&lt;/ul&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
        
        
      </item>
      
      <item>
        <title></title>
        <link>https://blog.mygraphql.com/zh/notes/cloud/helm/template/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        <author>labile.zhu@gmail.com (Mark Zhu)</author>
        
        <guid>https://blog.mygraphql.com/zh/notes/cloud/helm/template/</guid>
        <description>&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://helm.sh/docs/howto/charts_tips_and_tricks/&#34;&gt;https://helm.sh/docs/howto/charts_tips_and_tricks/&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Helm uses &lt;a href=&#34;https://godoc.org/text/template&#34;&gt;Go templates&lt;/a&gt; for templating your resource files. While Go ships several built-in functions, we have added many others.&lt;/p&gt;
&lt;p&gt;First, we added all of the functions in the &lt;a href=&#34;https://masterminds.github.io/sprig/&#34;&gt;Sprig library&lt;/a&gt;, except &lt;code&gt;env&lt;/code&gt; and &lt;code&gt;expandenv&lt;/code&gt;, for security reasons.&lt;/p&gt;
&lt;p&gt;We also added two special template functions: &lt;code&gt;include&lt;/code&gt; and &lt;code&gt;required&lt;/code&gt;. The &lt;code&gt;include&lt;/code&gt; function allows you to bring in another template, and then pass the results to other template functions.&lt;/p&gt;
&lt;h4 id=&#34;using-the-include-function&#34;&gt;Using the &amp;lsquo;include&amp;rsquo; Function&lt;/h4&gt;
&lt;p&gt;For example, this template snippet includes a template called &lt;code&gt;mytpl&lt;/code&gt;, then lowercases the result, then wraps that in double quotes.&lt;/p&gt;</description>
        
        <dc:creator>Mark Zhu</dc:creator>
        
        
        
        
        
        
      </item>
      

    
  </channel>
</rss>
