-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.xml
More file actions
482 lines (482 loc) · 53.1 KB
/
index.xml
File metadata and controls
482 lines (482 loc) · 53.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>matteo's blog</title><link>https://matteo-gz.github.io/</link><description>This is my cool site</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Sun, 22 Jun 2025 14:58:36 +0800</lastBuildDate><atom:link href="https://matteo-gz.github.io/index.xml" rel="self" type="application/rss+xml"/><item><title>go大小压缩</title><link>https://matteo-gz.github.io/posts/binsize/</link><pubDate>Sun, 22 Jun 2025 14:58:36 +0800</pubDate><author>xxxx</author><guid>https://matteo-gz.github.io/posts/binsize/</guid><description><![CDATA[<h2 id="官方自带">官方自带</h2>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
<div class="code-header language-shell">
<span class="code-title"><i class="arrow fas fa-angle-right fa-fw" aria-hidden="true"></i></span>
<span class="ellipses"><i class="fas fa-ellipsis-h fa-fw" aria-hidden="true"></i></span>
<span class="copy" title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden="true"></i></span>
</div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">go build -ldflags <span class="s1">'-s -w'</span> </span></span></code></pre></div></div>
<h2 id="upx-降低">upx 降低</h2>
<p><a href="https://github.com/upx/upx" target="_blank" rel="noopener noreffer ">https://github.com/upx/upx</a> 要选择最新版本,有优化效果</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
<div class="code-header language-shell">
<span class="code-title"><i class="arrow fas fa-angle-right fa-fw" aria-hidden="true"></i></span>
<span class="ellipses"><i class="fas fa-ellipsis-h fa-fw" aria-hidden="true"></i></span>
<span class="copy" title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden="true"></i></span>
</div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">upx -9 ./your-bin</span></span></code></pre></div></div>
<p>这个推荐在服务端使用,客户端不可控(会遇到运行不起来case).</p>
<h2 id="减少包依赖大小">减少包依赖大小</h2>
<h3 id="大小分析">大小分析</h3>
<p><a href="https://github.com/Zxilly/go-size-analyzer" target="_blank" rel="noopener noreffer ">https://github.com/Zxilly/go-size-analyzer</a></p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
<div class="code-header language-shell">
<span class="code-title"><i class="arrow fas fa-angle-right fa-fw" aria-hidden="true"></i></span>
<span class="ellipses"><i class="fas fa-ellipsis-h fa-fw" aria-hidden="true"></i></span>
<span class="copy" title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden="true"></i></span>
</div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="c1"># download</span>
</span></span><span class="line"><span class="cl">go install github.com/Zxilly/go-size-analyzer/cmd/gsa@latest
</span></span><span class="line"><span class="cl"><span class="c1"># 分析大小</span>
</span></span><span class="line"><span class="cl">gsa --web ./your-bin</span></span></code></pre></div></div>
<h3 id="依赖分析">依赖分析</h3>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
<div class="code-header language-shell">
<span class="code-title"><i class="arrow fas fa-angle-right fa-fw" aria-hidden="true"></i></span>
<span class="ellipses"><i class="fas fa-ellipsis-h fa-fw" aria-hidden="true"></i></span>
<span class="copy" title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden="true"></i></span>
</div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">go mod graph</span></span></code></pre></div></div>]]></description></item><item><title>Clickhouse</title><link>https://matteo-gz.github.io/posts/clickhouse/</link><pubDate>Sun, 09 Feb 2025 20:43:04 +0800</pubDate><author>xxxx</author><guid>https://matteo-gz.github.io/posts/clickhouse/</guid><description><![CDATA[<p>Clickhouse作为一种数据仓库的产品.</p>
<h2 id="优点">优点</h2>
<ul>
<li>文档清晰且有AI问答工具.</li>
<li>入门难度很低,拥有Mysql的经验即可.</li>
<li>阿里云也有其产品可以购买,生产稳定,出问题概率低.</li>
<li>数据压缩,存储成本低.</li>
<li>索引速度快.</li>
<li>可以直接录入Mysql作为data source.</li>
<li>交互协议上支持Http协议,伪Mysql协议和原生高性能协议.</li>
</ul>
<h2 id="gui推荐">GUI推荐</h2>
<p>DataGrip.</p>
<h2 id="sql操作">SQL操作</h2>
<p>数据管理利用TTL特性进行数据回收.</p>
<h3 id="数据分布">数据分布</h3>
<p>查询</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
<div class="code-header language-sql">
<span class="code-title"><i class="arrow fas fa-angle-right fa-fw" aria-hidden="true"></i></span>
<span class="ellipses"><i class="fas fa-ellipsis-h fa-fw" aria-hidden="true"></i></span>
<span class="copy" title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden="true"></i></span>
</div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="cl"><span class="k">select</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">from</span><span class="w"> </span><span class="k">system</span><span class="p">.</span><span class="n">parts</span><span class="w"> </span><span class="k">limit</span><span class="w"> </span><span class="mi">10</span><span class="p">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="o">#</span><span class="w"> </span><span class="err">目前转移的数据</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">select</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">from</span><span class="w"> </span><span class="k">system</span><span class="p">.</span><span class="n">mutations</span><span class="p">;</span></span></span></code></pre></div></div>
<h3 id="计算表大小">计算表大小</h3>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
<div class="code-header language-sql">
<span class="code-title"><i class="arrow fas fa-angle-right fa-fw" aria-hidden="true"></i></span>
<span class="ellipses"><i class="fas fa-ellipsis-h fa-fw" aria-hidden="true"></i></span>
<span class="copy" title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden="true"></i></span>
</div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="cl"><span class="k">SELECT</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">total_bytes</span><span class="o">/</span><span class="n">total_rows</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">table</span><span class="p">,</span><span class="k">database</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">formatReadableSize</span><span class="p">(</span><span class="n">total_bytes</span><span class="p">)</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="n">total_bytes_on_disk</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">FROM</span><span class="w"> </span><span class="k">system</span><span class="p">.</span><span class="n">tables</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">WHERE</span><span class="w"> </span><span class="k">table</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'table'</span><span class="p">;</span></span></span></code></pre></div></div>
<h3 id="表转移">表转移</h3>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
<div class="code-header language-sql">
<span class="code-title"><i class="arrow fas fa-angle-right fa-fw" aria-hidden="true"></i></span>
<span class="ellipses"><i class="fas fa-ellipsis-h fa-fw" aria-hidden="true"></i></span>
<span class="copy" title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden="true"></i></span>
</div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="cl"><span class="k">RENAME</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="k">database</span><span class="p">.</span><span class="n">exist_table</span><span class="w"> </span><span class="k">TO</span><span class="w"> </span><span class="k">database</span><span class="p">.</span><span class="n">old_table</span><span class="p">,</span><span class="w"> </span><span class="k">database</span><span class="p">.</span><span class="n">new_table</span><span class="w"> </span><span class="k">TO</span><span class="w"> </span><span class="k">database</span><span class="p">.</span><span class="n">exist_table</span><span class="p">;</span></span></span></code></pre></div></div>
<h3 id="数据回收">数据回收</h3>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
<div class="code-header language-sql">
<span class="code-title"><i class="arrow fas fa-angle-right fa-fw" aria-hidden="true"></i></span>
<span class="ellipses"><i class="fas fa-ellipsis-h fa-fw" aria-hidden="true"></i></span>
<span class="copy" title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden="true"></i></span>
</div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="cl"><span class="k">ALTER</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="k">database</span><span class="p">.</span><span class="k">table</span><span class="w"> </span><span class="k">DROP</span><span class="w"> </span><span class="n">PARTITION</span><span class="w"> </span><span class="s1">'20240925'</span><span class="p">;</span></span></span></code></pre></div></div>
<h3 id="修改ttl">修改TTL</h3>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
<div class="code-header language-sql">
<span class="code-title"><i class="arrow fas fa-angle-right fa-fw" aria-hidden="true"></i></span>
<span class="ellipses"><i class="fas fa-ellipsis-h fa-fw" aria-hidden="true"></i></span>
<span class="copy" title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden="true"></i></span>
</div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="cl"><span class="k">ALTER</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="k">database</span><span class="p">.</span><span class="k">table</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">MODIFY</span><span class="w"> </span><span class="n">TTL</span><span class="w"> </span><span class="k">timestamp</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">toIntervalMonth</span><span class="p">(</span><span class="mi">2</span><span class="p">);</span></span></span></code></pre></div></div>
<h3 id="查看表结构">查看表结构</h3>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
<div class="code-header language-sql">
<span class="code-title"><i class="arrow fas fa-angle-right fa-fw" aria-hidden="true"></i></span>
<span class="ellipses"><i class="fas fa-ellipsis-h fa-fw" aria-hidden="true"></i></span>
<span class="copy" title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden="true"></i></span>
</div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="cl"><span class="k">SELECT</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="n">field_name</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">table</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="k">table_name</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">type</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="n">field_type</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">comment</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="n">field_comment</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">FROM</span><span class="w"> </span><span class="k">system</span><span class="p">.</span><span class="n">columns</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">WHERE</span><span class="w"> </span><span class="k">database</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'database'</span><span class="w"> </span><span class="k">AND</span><span class="w"> </span><span class="k">table</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'table'</span><span class="p">;</span></span></span></code></pre></div></div>
<h2 id="常用函数">常用函数</h2>
<h3 id="易读数量">易读数量</h3>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
<div class="code-header language-sql">
<span class="code-title"><i class="arrow fas fa-angle-right fa-fw" aria-hidden="true"></i></span>
<span class="ellipses"><i class="fas fa-ellipsis-h fa-fw" aria-hidden="true"></i></span>
<span class="copy" title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden="true"></i></span>
</div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="cl"><span class="n">formatReadableQuantity</span><span class="p">(</span><span class="k">count</span><span class="p">())</span></span></span></code></pre></div></div>
<h3 id="时间切割">时间切割</h3>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
<div class="code-header language-sql">
<span class="code-title"><i class="arrow fas fa-angle-right fa-fw" aria-hidden="true"></i></span>
<span class="ellipses"><i class="fas fa-ellipsis-h fa-fw" aria-hidden="true"></i></span>
<span class="copy" title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden="true"></i></span>
</div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="cl"><span class="n">toStartOfInterval</span><span class="p">(</span><span class="n">toDateTime</span><span class="p">(</span><span class="k">timestamp</span><span class="p">),</span><span class="w"> </span><span class="nb">INTERVAL</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="k">day</span><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="n">interval1</span></span></span></code></pre></div></div>
<h3 id="截取数据">截取数据</h3>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
<div class="code-header language-sql">
<span class="code-title"><i class="arrow fas fa-angle-right fa-fw" aria-hidden="true"></i></span>
<span class="ellipses"><i class="fas fa-ellipsis-h fa-fw" aria-hidden="true"></i></span>
<span class="copy" title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden="true"></i></span>
</div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="cl"><span class="k">substring</span><span class="p">(</span><span class="n">message</span><span class="p">,</span><span class="w"> </span><span class="o">-</span><span class="mi">20</span><span class="p">)</span><span class="w"> </span></span></span></code></pre></div></div>
<h3 id="数据类型转换">数据类型转换</h3>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
<div class="code-header language-sql">
<span class="code-title"><i class="arrow fas fa-angle-right fa-fw" aria-hidden="true"></i></span>
<span class="ellipses"><i class="fas fa-ellipsis-h fa-fw" aria-hidden="true"></i></span>
<span class="copy" title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden="true"></i></span>
</div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="cl"><span class="n">toString</span></span></span></code></pre></div></div>
<h3 id="数据拼接">数据拼接</h3>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
<div class="code-header language-sql">
<span class="code-title"><i class="arrow fas fa-angle-right fa-fw" aria-hidden="true"></i></span>
<span class="ellipses"><i class="fas fa-ellipsis-h fa-fw" aria-hidden="true"></i></span>
<span class="copy" title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden="true"></i></span>
</div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="cl"><span class="n">concat</span><span class="p">(</span><span class="n">a</span><span class="p">,</span><span class="s1">''</span><span class="p">,</span><span class="n">toString</span><span class="p">(</span><span class="n">b</span><span class="p">))</span></span></span></code></pre></div></div>
<h2 id="clickhouse-同步mysql数据">clickhouse 同步mysql数据</h2>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
<div class="code-header language-sql">
<span class="code-title"><i class="arrow fas fa-angle-right fa-fw" aria-hidden="true"></i></span>
<span class="ellipses"><i class="fas fa-ellipsis-h fa-fw" aria-hidden="true"></i></span>
<span class="copy" title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden="true"></i></span>
</div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="cl"><span class="k">SET</span><span class="w"> </span><span class="n">allow_experimental_database_materialized_mysql</span><span class="o">=</span><span class="mi">1</span><span class="p">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">CREATE</span><span class="w"> </span><span class="k">DATABASE</span><span class="w"> </span><span class="n">new_database</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">ENGINE</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MaterializedMySQL</span><span class="p">(</span><span class="s1">'host:3306'</span><span class="p">,</span><span class="s1">'database'</span><span class="p">,</span><span class="w"> </span><span class="s1">'user'</span><span class="p">,</span><span class="w"> </span><span class="s1">'password'</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">SETTINGS</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">allows_query_when_mysql_lost</span><span class="o">=</span><span class="k">true</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">max_wait_time_when_mysql_unavailable</span><span class="o">=</span><span class="mi">10000</span><span class="p">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1">-- drop database new_database;</span></span></span></code></pre></div></div>
<h3 id="mysql-服务端">mysql 服务端</h3>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
<div class="code-header language-sql">
<span class="code-title"><i class="arrow fas fa-angle-right fa-fw" aria-hidden="true"></i></span>
<span class="ellipses"><i class="fas fa-ellipsis-h fa-fw" aria-hidden="true"></i></span>
<span class="copy" title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden="true"></i></span>
</div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="cl"><span class="n">default_authentication_plugin</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">mysql_native_password</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="n">gtid_mode</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">on</span></span></span></code></pre></div></div>
<h3 id="mysql-表条件">mysql 表条件</h3>
<p>MySQL中的每个表都应包含PRIMARY KEY,并且如果表中包含ENUM字段值超出范围(在ENUM签名中指定),则无法进行复制。</p>]]></description></item><item><title>Go 内存泄漏排查</title><link>https://matteo-gz.github.io/posts/memprofiling/</link><pubDate>Wed, 14 Aug 2024 07:33:07 +0800</pubDate><author>xxxx</author><guid>https://matteo-gz.github.io/posts/memprofiling/</guid><description><![CDATA[<h2 id="背景">背景</h2>
<p>某次发版后,生产机器的内存相比之前相同负载条件下使用率高,业务无异常影响.
而后带来的影响是,数据库连接资源随着pod数量提升占用提高.</p>
<h3 id="间接处理">间接处理</h3>
<ul>
<li>回滚版本</li>
<li>每隔固定时间定时重新发版</li>
<li>把所有依赖pkg升级至最新,把Go版本升级至最新</li>
<li>服务拆分,让业务链路保持简单.</li>
</ul>
<h3 id="直接处理">直接处理</h3>
<ul>
<li>排查内存泄漏与修复</li>
</ul>
<h3 id="思路">思路</h3>
<h4 id="复现生产环境场景">复现生产环境场景</h4>
<p>在测试环境里,对比此次版本的功能改动点进行压测,难以压测的直接for循环将变动函数调用增加10倍来调试或者将time.ticker的频率放大10倍.</p>
<h4 id="使用pyroscope分析">使用pyroscope分析</h4>
<p>pyroscope <a href="https://pyroscope.io/" target="_blank" rel="noopener noreffer ">https://pyroscope.io/</a> 是基于golang的<code>pprof</code>工具进行采集.</p>
<h4 id="使用pprof">使用pprof</h4>
<p>go官方自带的工具 <a href="https://github.com/google/pprof" target="_blank" rel="noopener noreffer ">https://github.com/google/pprof</a></p>
<h4 id="使用perf">使用perf</h4>
<p>perf是个经典的分析工具, <a href="https://github.com/google/perf_data_converter" target="_blank" rel="noopener noreffer ">https://github.com/google/perf_data_converter</a> 可以将<code>perf</code>的分析报告转化为<code>pprof</code>的格式进行分析</p>
<h2 id="pprof着手分析">pprof着手分析</h2>
<h3 id="下载heap分析文件">下载heap分析文件</h3>
<p>接入pprof后,可用<code>curl</code>下载分析文件 <code>curl -o heapfile http://localhost/debug/pprof/heap?seconds=30</code> .
上述命令可捕获30秒的堆文件分析.</p>
<h3 id="查看pprof官方自带文档">查看pprof官方自带文档</h3>
<p>关于pprof的使用说明,请务必看完 <a href="https://github.com/google/pprof/blob/main/doc/README.md" target="_blank" rel="noopener noreffer ">https://github.com/google/pprof/blob/main/doc/README.md</a>
该文讲述了</p>
<ul>
<li>pprof字段 <code>flat</code> <code>cum</code> 代表的含义.</li>
<li>可通过web的方式进行UI交互或者cli方式交互. <code>go tool pprof -http :8810 heapfile</code></li>
<li>调用图里面的颜色,矩形大小,矩形边缘粗细,虚线箭头和实线箭头的含义解释</li>
<li>可对比2个时间段的pprof文件,<code>go tool pprof --base base.heap current.heap</code></li>
</ul>
<h3 id="内存采样率控制">内存采样率控制</h3>
<p><a href="https://github.com/golang/go/blob/release-branch.go1.23/src/runtime/mprof.go#L938" target="_blank" rel="noopener noreffer ">runtime.MemProfileRate</a> 采样率控制.</p>
<p>假设runtime.MemProfileRate=N,那么采样为1/N进行.如果觉得采样率小了,可以在测试环境进行调整.</p>
<h3 id="空闲-heap">空闲 Heap</h3>
<p><a href="http://localhost/debug/pprof/heap?debug=1" target="_blank" rel="noopener noreffer ">http://localhost/debug/pprof/heap?debug=1</a> 有个<code>HeapIdle</code>指标.</p>]]></description></item><item><title>linux压测配置优化</title><link>https://matteo-gz.github.io/posts/press_linux/</link><pubDate>Wed, 29 May 2024 00:21:12 +0800</pubDate><author>xxxx</author><guid>https://matteo-gz.github.io/posts/press_linux/</guid><description><![CDATA[<h2 id="背景">背景</h2>
<p>临时租赁服务器,进行灰度压测,进行大量并发cURL.测试机器压榨单机极限性能.</p>
<h2 id="修改单进程句柄限制">修改单进程句柄限制</h2>
<h3 id="查看进程最大文件数">查看进程最大文件数</h3>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
<div class="code-header language-shell">
<span class="code-title"><i class="arrow fas fa-angle-right fa-fw" aria-hidden="true"></i></span>
<span class="ellipses"><i class="fas fa-ellipsis-h fa-fw" aria-hidden="true"></i></span>
<span class="copy" title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden="true"></i></span>
</div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="c1"># 查看进程最大文件数</span>
</span></span><span class="line"><span class="cl"><span class="nb">ulimit</span> -n</span></span></code></pre></div></div>
<h3 id="修改进程最大文件数">修改进程最大文件数</h3>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
<div class="code-header language-shell">
<span class="code-title"><i class="arrow fas fa-angle-right fa-fw" aria-hidden="true"></i></span>
<span class="ellipses"><i class="fas fa-ellipsis-h fa-fw" aria-hidden="true"></i></span>
<span class="copy" title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden="true"></i></span>
</div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="nb">ulimit</span> -SHn <span class="m">1048576</span></span></span></code></pre></div></div>
<ul>
<li>S 表示设置软限制(soft limit)。软限制是指系统允许进程使用的资源上限,但进程可以尝试超过这个限制。</li>
<li>H 表示设置硬限制(hard limit)。硬限制是指系统绝对允许进程使用的资源上限,即使进程尝试超过这个限制,系统也会阻止它。</li>
<li>n 表示设置进程可以打开的文件描述符的最大数量</li>
</ul>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
<div class="code-header language-shell">
<span class="code-title"><i class="arrow fas fa-angle-right fa-fw" aria-hidden="true"></i></span>
<span class="ellipses"><i class="fas fa-ellipsis-h fa-fw" aria-hidden="true"></i></span>
<span class="copy" title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden="true"></i></span>
</div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="c1"># 防止重启后失效</span>
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="nb">ulimit</span> -HSn <span class="m">1048576</span> >> /etc/rc.local
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="nb">ulimit</span> -HSn <span class="m">1048576</span> >>/root/.bash_profile</span></span></code></pre></div></div>
<h3 id="ulimit影响因素">ulimit影响因素</h3>
<ul>
<li><code>fs.nr_open</code>;进程最大文件描述符数</li>
<li><code>fs.file-max</code>;系统最大文件描述符数</li>
</ul>
<h3 id="修改etcsysctlconf">修改<code>/etc/sysctl.conf</code></h3>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
<div class="code-header language-shell">
<span class="code-title"><i class="arrow fas fa-angle-right fa-fw" aria-hidden="true"></i></span>
<span class="ellipses"><i class="fas fa-ellipsis-h fa-fw" aria-hidden="true"></i></span>
<span class="copy" title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden="true"></i></span>
</div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="c1"># /etc/sysctl.conf</span>
</span></span><span class="line"><span class="cl">fs.file-max <span class="o">=</span> <span class="m">1048576</span>
</span></span><span class="line"><span class="cl">fs.nr_open<span class="o">=</span><span class="m">1048576</span></span></span></code></pre></div></div>
<h2 id="nf_conntrack_max-开启">nf_conntrack_max 开启</h2>
<p>防止配置<code>net.nf_conntrack_max</code>报错</p>]]></description></item><item><title>linux排查</title><link>https://matteo-gz.github.io/posts/linux_debug/</link><pubDate>Sat, 25 May 2024 14:45:53 +0800</pubDate><author>xxxx</author><guid>https://matteo-gz.github.io/posts/linux_debug/</guid><description><![CDATA[<blockquote>
<p>Linux性能优化实战 笔记
<a href="https://time.geekbang.org/column/intro/100020901" target="_blank" rel="noopener noreffer ">https://time.geekbang.org/column/intro/100020901</a></p></blockquote>
<h2 id="模拟工具">模拟工具</h2>
<h3 id="stress">stress</h3>
<blockquote>
<p>stress 是一个 Linux 系统压力测试工具,这里我们用作异常进程模拟平均负载升高的场景</p></blockquote>
<p><code>apk add stress-ng</code></p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
<div class="code-header language-shell">
<span class="code-title"><i class="arrow fas fa-angle-right fa-fw" aria-hidden="true"></i></span>
<span class="ellipses"><i class="fas fa-ellipsis-h fa-fw" aria-hidden="true"></i></span>
<span class="copy" title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden="true"></i></span>
</div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="c1"># 一个 CPU 使用率 100%</span>
</span></span><span class="line"><span class="cl">stress --cpu <span class="m">1</span> --timeout <span class="m">600</span></span></span></code></pre></div></div>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
<div class="code-header language-shell">
<span class="code-title"><i class="arrow fas fa-angle-right fa-fw" aria-hidden="true"></i></span>
<span class="ellipses"><i class="fas fa-ellipsis-h fa-fw" aria-hidden="true"></i></span>
<span class="copy" title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden="true"></i></span>
</div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="c1"># 模拟 I/O 压力</span>
</span></span><span class="line"><span class="cl">stress -i <span class="m">1</span> --timeout <span class="m">600</span></span></span></code></pre></div></div>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
<div class="code-header language-shell">
<span class="code-title"><i class="arrow fas fa-angle-right fa-fw" aria-hidden="true"></i></span>
<span class="ellipses"><i class="fas fa-ellipsis-h fa-fw" aria-hidden="true"></i></span>
<span class="copy" title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden="true"></i></span>
</div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="c1"># 8个进程</span>
</span></span><span class="line"><span class="cl"> stress -c <span class="m">8</span> --timeout <span class="m">600</span></span></span></code></pre></div></div>
<h3 id="sysbench">sysbench</h3>
<blockquote>
<p>sysbench 是一个多线程的基准测试工具,一般用来评估不同系统参数下的数据库负载情况</p>]]></description></item><item><title>supervisor搭建</title><link>https://matteo-gz.github.io/posts/supervisor/</link><pubDate>Thu, 23 May 2024 17:44:27 +0800</pubDate><author>xxxx</author><guid>https://matteo-gz.github.io/posts/supervisor/</guid><description><![CDATA[<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
<div class="code-header language-">
<span class="code-title"><i class="arrow fas fa-angle-right fa-fw" aria-hidden="true"></i></span>
<span class="ellipses"><i class="fas fa-ellipsis-h fa-fw" aria-hidden="true"></i></span>
<span class="copy" title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden="true"></i></span>
</div><pre tabindex="0"><code># 下载
pip install supervisor
# 初始化配置
echo_supervisord_conf > /etc/supervisord.conf</code></pre></div>
<p>vim <code>/etc/supervisord.conf</code> append</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
<div class="code-header language-">
<span class="code-title"><i class="arrow fas fa-angle-right fa-fw" aria-hidden="true"></i></span>
<span class="ellipses"><i class="fas fa-ellipsis-h fa-fw" aria-hidden="true"></i></span>
<span class="copy" title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden="true"></i></span>
</div><pre tabindex="0"><code>[program:process1]
command=/root/process1
autorestart=true</code></pre></div>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
<div class="code-header language-shell">
<span class="code-title"><i class="arrow fas fa-angle-right fa-fw" aria-hidden="true"></i></span>
<span class="ellipses"><i class="fas fa-ellipsis-h fa-fw" aria-hidden="true"></i></span>
<span class="copy" title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden="true"></i></span>
</div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="c1"># 载入服务</span>
</span></span><span class="line"><span class="cl">supervisord -c /etc/supervisord.conf
</span></span><span class="line"><span class="cl"><span class="c1"># 启动</span>
</span></span><span class="line"><span class="cl">supervisorctl start process1
</span></span><span class="line"><span class="cl"><span class="c1"># 停止</span>
</span></span><span class="line"><span class="cl">supervisorctl stop process1
</span></span><span class="line"><span class="cl"><span class="c1"># 更新了 /etc/supervisord.conf后</span>
</span></span><span class="line"><span class="cl">supervisorctl reload</span></span></code></pre></div></div>]]></description></item><item><title>排查网络</title><link>https://matteo-gz.github.io/posts/network_check/</link><pubDate>Sat, 27 Apr 2024 18:17:11 +0800</pubDate><author>xxxx</author><guid>https://matteo-gz.github.io/posts/network_check/</guid><description><![CDATA[<h2 id="检查tcp端口连通性">检查TCP端口连通性</h2>
<p><code>nc -vz www.example.com 80 </code></p>
<p>v是verbose mode</p>
<p>使用-z参数快速扫描端口状态,是否开放</p>
<h3 id="window下powershell">window下powershell</h3>
<p><code>Test-NetConnection -ComputerName 127.0.0.1 -Port 6379</code></p>
<h2 id="检查网络延时">检查网络延时</h2>
<p><code>mtr baidu.com -r</code>
数字单位是ms,r是report的意思</p>
<h2 id="ping">ping</h2>
<p>ping检查范围限于ICMP协议</p>
<h2 id="kill端口">kill端口</h2>
<p>window</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
<div class="code-header language-shell">
<span class="code-title"><i class="arrow fas fa-angle-right fa-fw" aria-hidden="true"></i></span>
<span class="ellipses"><i class="fas fa-ellipsis-h fa-fw" aria-hidden="true"></i></span>
<span class="copy" title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden="true"></i></span>
</div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="c1"># 寻找占用80端口</span>
</span></span><span class="line"><span class="cl">netstat -ano <span class="p">|</span>findstr <span class="m">80</span>
</span></span><span class="line"><span class="cl"><span class="c1"># kill进程</span>
</span></span><span class="line"><span class="cl">taskkill /f /pid <span class="m">28020</span></span></span></code></pre></div></div>
<h3 id="找到进程的启动命令">找到进程的启动命令</h3>
<p>window环境</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
<div class="code-header language-shell">
<span class="code-title"><i class="arrow fas fa-angle-right fa-fw" aria-hidden="true"></i></span>
<span class="ellipses"><i class="fas fa-ellipsis-h fa-fw" aria-hidden="true"></i></span>
<span class="copy" title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden="true"></i></span>
</div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">wmic process where <span class="s2">"processid=1323"</span> get processid,commandline</span></span></code></pre></div></div>]]></description></item><item><title>Redis实操记录</title><link>https://matteo-gz.github.io/posts/redis/</link><pubDate>Sat, 27 Apr 2024 00:18:43 +0800</pubDate><author>xxxx</author><guid>https://matteo-gz.github.io/posts/redis/</guid><description><![CDATA[<h2 id="redis架构">redis架构</h2>
<p>目的: 针对不同的业务特性,选择合适的架构.</p>
<h3 id="单机模式">单机模式</h3>
<p>一台redis节点,适合本地使用.</p>
<p>若机器挂了则无解.</p>
<h3 id="主从模式">主从模式</h3>
<p>一台写节点,多台从节点,适合多读少写场景.</p>
<p>若写压力上来,则无解.</p>
<h3 id="哨兵模式">哨兵模式</h3>
<p>写节点自动转移,满足高可用.适合多读少写场景.</p>
<p>若写压力上来,则有瓶颈.写节点挂了会转移,写节点会故障一段时间.
若不彻底解决写压力,无法根治问题.</p>
<h3 id="集群模式">集群模式</h3>
<p>属于分布式架构,可以堆机器解决写压力.</p>
<h2 id="redis连接数">redis连接数</h2>
<p>目的: 提高应用性能,避免频繁的创建和销毁连接.</p>
<p>使用redis连接池.</p>
<p>需要埋点redis连接池的<strong>命中率</strong>.</p>
<p>若<strong>空闲连接</strong>持续为空,则明显连接数不够用需要<strong>提升</strong>.</p>
<p>根据业务<strong>压测</strong>,确定redis连接数的合理范围.</p>
<h3 id="关闭连接">关闭连接</h3>
<p>当应用关闭时,记得close连接.</p>
<h2 id="redis缓存策略">redis缓存策略</h2>
<h3 id="获取redis缓存策略">获取redis缓存策略</h3>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
<div class="code-header language-shell">
<span class="code-title"><i class="arrow fas fa-angle-right fa-fw" aria-hidden="true"></i></span>
<span class="ellipses"><i class="fas fa-ellipsis-h fa-fw" aria-hidden="true"></i></span>
<span class="copy" title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden="true"></i></span>
</div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">config get maxmemory-policy</span></span></code></pre></div></div>
<p>默认是<code>noeviction</code></p>
<h3 id="lru与lfu算法">LRU与LFU算法</h3>
<ul>
<li>Least Recently Used :最近最少使用</li>
<li>Least Frequently Used : 最近最不常用</li>
</ul>
<p>阿里云的redis策略是选择<code>volatile-lru</code></p>
<p>redis.conf</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
<div class="code-header language-shell">
<span class="code-title"><i class="arrow fas fa-angle-right fa-fw" aria-hidden="true"></i></span>
<span class="ellipses"><i class="fas fa-ellipsis-h fa-fw" aria-hidden="true"></i></span>
<span class="copy" title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden="true"></i></span>
</div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">maxmemory-policy volatile-lru</span></span></code></pre></div></div>
<h3 id="查询redis的热点key">查询redis的热点key</h3>
<p>lfu算法下可使用<code>redis-cli --hotkeys</code>,查询redis的热点key.</p>]]></description></item><item><title>Go metrics</title><link>https://matteo-gz.github.io/posts/gometrics/</link><pubDate>Thu, 08 Feb 2024 10:20:57 +0800</pubDate><author>xxxx</author><guid>https://matteo-gz.github.io/posts/gometrics/</guid><description><![CDATA[<h2 id="导入包">导入包</h2>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
<div class="code-header language-shell">
<span class="code-title"><i class="arrow fas fa-angle-right fa-fw" aria-hidden="true"></i></span>
<span class="ellipses"><i class="fas fa-ellipsis-h fa-fw" aria-hidden="true"></i></span>
<span class="copy" title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden="true"></i></span>
</div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">go get -u github.com/go-kratos/kratos/contrib/metrics/prometheus/v2</span></span></code></pre></div></div>
<h2 id="注册路由">注册路由</h2>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
<div class="code-header language-go">
<span class="code-title"><i class="arrow fas fa-angle-right fa-fw" aria-hidden="true"></i></span>
<span class="ellipses"><i class="fas fa-ellipsis-h fa-fw" aria-hidden="true"></i></span>
<span class="copy" title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden="true"></i></span>
</div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="c1">// 导入pkg</span>
</span></span><span class="line"><span class="cl"> <span class="kn">import</span> <span class="s">"github.com/prometheus/client_golang/prometheus/promhttp"</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// http 服务注册此路由</span>
</span></span><span class="line"><span class="cl"><span class="nx">router</span><span class="p">.</span><span class="nf">Handle</span><span class="p">(</span><span class="s">"/metrics"</span><span class="p">,</span> <span class="nx">promhttp</span><span class="p">.</span><span class="nf">Handler</span><span class="p">())</span></span></span></code></pre></div></div>
<h2 id="验证是否引入metrics">验证是否引入metrics</h2>
<p><code>curl /metrics</code> 可以看到默认的数据</p>
<h2 id="定义一个指标">定义一个指标</h2>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
<div class="code-header language-go">
<span class="code-title"><i class="arrow fas fa-angle-right fa-fw" aria-hidden="true"></i></span>
<span class="ellipses"><i class="fas fa-ellipsis-h fa-fw" aria-hidden="true"></i></span>
<span class="copy" title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden="true"></i></span>
</div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kd">var</span> <span class="nx">_metricRequests</span> <span class="p">=</span> <span class="nx">prometheus</span><span class="p">.</span><span class="nf">NewCounterVec</span><span class="p">(</span><span class="nx">prometheus</span><span class="p">.</span><span class="nx">CounterOpts</span><span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nx">Namespace</span><span class="p">:</span> <span class="s">"server"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nx">Subsystem</span><span class="p">:</span> <span class="s">"requests"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nx">Name</span><span class="p">:</span> <span class="s">"code_total"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nx">Help</span><span class="p">:</span> <span class="s">"The total number of processed requests"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"><span class="p">},</span> <span class="p">[]</span><span class="kt">string</span><span class="p">{</span><span class="s">"kind"</span><span class="p">,</span> <span class="s">"operation"</span><span class="p">,</span> <span class="s">"code"</span><span class="p">,</span> <span class="s">"reason"</span><span class="p">})</span></span></span></code></pre></div></div>
<h2 id="注册该指标">注册该指标</h2>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
<div class="code-header language-go">
<span class="code-title"><i class="arrow fas fa-angle-right fa-fw" aria-hidden="true"></i></span>
<span class="ellipses"><i class="fas fa-ellipsis-h fa-fw" aria-hidden="true"></i></span>
<span class="copy" title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden="true"></i></span>
</div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kn">import</span> <span class="s">"github.com/prometheus/client_golang/prometheus"</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nx">prometheus</span><span class="p">.</span><span class="nf">MustRegister</span><span class="p">(</span><span class="nx">_metricRequests</span><span class="p">)</span></span></span></code></pre></div></div>
<h2 id="使用指标">使用指标</h2>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
<div class="code-header language-go">
<span class="code-title"><i class="arrow fas fa-angle-right fa-fw" aria-hidden="true"></i></span>
<span class="ellipses"><i class="fas fa-ellipsis-h fa-fw" aria-hidden="true"></i></span>
<span class="copy" title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden="true"></i></span>
</div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kd">var</span> <span class="nx">requests</span> <span class="p">=</span> <span class="nx">prom</span><span class="p">.</span><span class="nf">NewCounter</span><span class="p">(</span><span class="nx">_metricRequests</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nx">requests</span><span class="p">.</span><span class="nf">With</span><span class="p">(</span><span class="s">"get"</span><span class="p">,</span> <span class="s">"/"</span><span class="p">,</span> <span class="s">"200"</span><span class="p">,</span> <span class="s">"OK"</span><span class="p">).</span><span class="nf">Inc</span><span class="p">()</span></span></span></code></pre></div></div>
<h2 id="验证定义指标是否生效">验证定义指标是否生效</h2>
<p>当我们使用完指标后 即可查看</p>]]></description></item><item><title>小米解锁BL</title><link>https://matteo-gz.github.io/posts/xiaomiunlock/</link><pubDate>Sat, 30 Dec 2023 17:01:21 +0800</pubDate><author>xxxx</author><guid>https://matteo-gz.github.io/posts/xiaomiunlock/</guid><description><![CDATA[<p>这个办法是通过<code>闲鱼APP</code>上找人,利用<code>UBL key</code>解锁小米BL.</p>
<p>此方法需要<strong>消耗金钱</strong>,即购买<code>UBL key</code>的钱.</p>
<p>免费的方法为 <code>https://github.com/MlgmXyysd/Xiaomi-HyperOS-BootLoader-Bypass</code> ,但是无法解锁小米14之后的机型.</p>
<h2 id="准备工作">准备工作</h2>
<h3 id="下载客户端">下载客户端</h3>
<p><a href="https://xiaomikey.net/" target="_blank" rel="noopener noreffer ">https://xiaomikey.net/</a>
window环境需要</p>
<h3 id="下载驱动">下载驱动</h3>
<p><a href="https://xiaomiflashtool.com/" target="_blank" rel="noopener noreffer ">https://xiaomiflashtool.com/</a></p>
<p>让xiaomikey客户端识别出小米手机,</p>
<p>理论上<code>xiaomikey软件</code>里面包含了<code>xiaomiflash</code></p>
<h3 id="下载adb">下载ADB</h3>
<p><a href="https://developer.android.com/tools/releases/platform-tools" target="_blank" rel="noopener noreffer ">https://developer.android.com/tools/releases/platform-tools</a></p>
<p>将路径追加尽系统path.</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
<div class="code-header language-shell">
<span class="code-title"><i class="arrow fas fa-angle-right fa-fw" aria-hidden="true"></i></span>
<span class="ellipses"><i class="fas fa-ellipsis-h fa-fw" aria-hidden="true"></i></span>
<span class="copy" title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden="true"></i></span>
</div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">adb devices</span></span></code></pre></div></div>
<h2 id="准备刷机">准备刷机</h2>
<h3 id="小米手机进入开发者模式">小米手机进入开发者模式</h3>
<p>点击系统版本 连续点击5次 即可进入开发者模式</p>
<h3 id="开发者模式下进行usb调试">开发者模式下进行USB调试</h3>
<p>要求</p>
<ul>
<li>必须登录小米账号</li>
<li>必须插入sim卡</li>
<li>必须使用移动网络</li>
</ul>
<p>在开发者模式下 打开允许USB调试.</p>
<p>电脑插入手机,手机选择信任电脑的连接.</p>
<h3 id="adb进入fastboot模式">adb进入fastboot模式</h3>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
<div class="code-header language-shell">
<span class="code-title"><i class="arrow fas fa-angle-right fa-fw" aria-hidden="true"></i></span>
<span class="ellipses"><i class="fas fa-ellipsis-h fa-fw" aria-hidden="true"></i></span>
<span class="copy" title="Copy to clipboard"><i class="far fa-copy fa-fw" aria-hidden="true"></i></span>
</div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="c1"># 查看设备</span>
</span></span><span class="line"><span class="cl">adb devices
</span></span><span class="line"><span class="cl"><span class="c1"># 进入fastboot</span>
</span></span><span class="line"><span class="cl">adb reboot bootloader</span></span></code></pre></div></div>
<h3 id="登录xiaomikey">登录xiaomikey</h3>
<p>打开软件,选择 <code>unlock boot- ubl key</code>.</p>]]></description></item></channel></rss>