排查网络

检查TCP端口连通性

nc -vz www.example.com 80

v是verbose mode

使用-z参数快速扫描端口状态,是否开放

window下powershell

Test-NetConnection -ComputerName 127.0.0.1 -Port 6379

检查网络延时

mtr baidu.com -r 数字单位是ms,r是report的意思

ping

ping检查范围限于ICMP协议

kill端口

window

# 寻找占用80端口
netstat -ano |findstr 80
# kill进程
taskkill /f /pid 28020

找到进程的启动命令

window环境

wmic process where "processid=1323" get processid,commandline

Redis实操记录

redis架构

目的: 针对不同的业务特性,选择合适的架构.

单机模式

一台redis节点,适合本地使用.

若机器挂了则无解.

主从模式

一台写节点,多台从节点,适合多读少写场景.

若写压力上来,则无解.

哨兵模式

写节点自动转移,满足高可用.适合多读少写场景.

若写压力上来,则有瓶颈.写节点挂了会转移,写节点会故障一段时间. 若不彻底解决写压力,无法根治问题.

集群模式

属于分布式架构,可以堆机器解决写压力.

redis连接数

目的: 提高应用性能,避免频繁的创建和销毁连接.

使用redis连接池.

需要埋点redis连接池的命中率.

若空闲连接持续为空,则明显连接数不够用需要提升.

根据业务压测,确定redis连接数的合理范围.

关闭连接

当应用关闭时,记得close连接.

redis缓存策略

获取redis缓存策略

config get maxmemory-policy

默认是noeviction

LRU与LFU算法

  • Least Recently Used :最近最少使用
  • Least Frequently Used : 最近最不常用

阿里云的redis策略是选择volatile-lru

redis.conf

maxmemory-policy volatile-lru

查询redis的热点key

lfu算法下可使用redis-cli --hotkeys,查询redis的热点key.

Go metrics

导入包

go get -u github.com/go-kratos/kratos/contrib/metrics/prometheus/v2

注册路由

// 导入pkg
 import "github.com/prometheus/client_golang/prometheus/promhttp"

// http 服务注册此路由
router.Handle("/metrics", promhttp.Handler())

验证是否引入metrics

curl /metrics 可以看到默认的数据

定义一个指标

var _metricRequests = prometheus.NewCounterVec(prometheus.CounterOpts{
	Namespace: "server",
	Subsystem: "requests",
	Name:      "code_total",
	Help:      "The total number of processed requests",
}, []string{"kind", "operation", "code", "reason"})

注册该指标

import "github.com/prometheus/client_golang/prometheus"

prometheus.MustRegister(_metricRequests)

使用指标

var requests = prom.NewCounter(_metricRequests)
requests.With("get", "/", "200", "OK").Inc()

验证定义指标是否生效

当我们使用完指标后 即可查看

小米解锁BL

这个办法是通过闲鱼APP上找人,利用UBL key解锁小米BL.

此方法需要消耗金钱,即购买UBL key的钱.

免费的方法为 https://github.com/MlgmXyysd/Xiaomi-HyperOS-BootLoader-Bypass ,但是无法解锁小米14之后的机型.

准备工作

下载客户端

https://xiaomikey.net/ window环境需要

下载驱动

https://xiaomiflashtool.com/

让xiaomikey客户端识别出小米手机,

理论上xiaomikey软件里面包含了xiaomiflash

下载ADB

https://developer.android.com/tools/releases/platform-tools

将路径追加尽系统path.

adb devices

准备刷机

小米手机进入开发者模式

点击系统版本 连续点击5次 即可进入开发者模式

开发者模式下进行USB调试

要求

  • 必须登录小米账号
  • 必须插入sim卡
  • 必须使用移动网络

在开发者模式下 打开允许USB调试.

电脑插入手机,手机选择信任电脑的连接.

adb进入fastboot模式

# 查看设备
adb devices
# 进入fastboot
adb reboot bootloader

登录xiaomikey

打开软件,选择 unlock boot- ubl key.

socks5 协议

资料

rfc1928

SOCKS Protocol Version 5

https://datatracker.ietf.org/doc/html/rfc1928

socks5目标: TCP 和 UDP 域中的客户端-服务器应用程序提供一个框架,以便方便、安全地使用网络防火墙的服务

字节序

0x01234567 在字节顺序中表现

Big-Endian

0x100: 0x01
0x101: 0x23
0x102: 0x45
0x103: 0x67

Little-Endian

0x100: 0x67
0x101: 0x45
0x102: 0x23
0x103: 0x01

rfc1929

Username/Password Authentication for SOCKS V5

显卡相关

显卡挑选

原文which gpu for deep learning by Tim Dettmers - 2023/01/30

对此摘抄了 显卡工作原理 与 显卡关键因素


算力产品 AutoDL

显卡工作原理

结论

许多人说GPU快是因为 matrix multiplication 矩阵乘法 和 convolution 卷积 高效,Tim Dettmers认为是memory bandwidth 内存带宽.


内存带宽优点

CPU是延迟优化的,而GPU是带宽优化的.类比CPU是法拉利,GPU是大卡车, 在从 随机 A点 运货到 随机 B点 过程中,

CPU可以快速获取 RAM Random Access Memory 中的一些memory,而GPU则更慢(latency 延迟 要高得多), 但是CPU需要多次来回才能完成其工作,而GPU可以一次获取更多memory 内存.

CPU擅长快速获取少量内存(5 3 7), 而GPU擅长获取大量内存(矩阵乘法:(A*B)*C).

最好的CPU有大约 50GB/s,而最好的GPU有 750GB/s 的内存带宽.

如果计算操作需要的内存越多,GPU相对于CPU的优势就越明显.但是仍然存在可能会损害GPU性能的延迟.

一辆大卡车每次旅行可能都能拿起很多包裹,但问题是你要等很长时间,直到下一组包裹到达. 如果不解决这个问题,即使对于大量数据,GPU 也会非常慢.那么这个问题是如何解决的呢?


线程并行

如果你要求一辆大卡车进行多次旅行来取包裹,一旦卡车离开进行下一次旅行,你总是会等待很长时间才能收到下一批包裹——卡车只是很慢.

但是,如果您现在使用由法拉利和大型卡车组成的车队(线程并行),并且你有很多包裹(大块内存如 matrix 矩阵)的工作,那么你将等待第一辆卡车,

但在那之后你将根本没有等待时间 — 卸载包裹需要花费大量时间,以至于所有卡车都将在卸载位置B排队,以便你始终可以直接访问你的包裹(memory). 这有效地隐藏了延迟,以便GPU提供高带宽,同时在线程并行性下隐藏其延迟 — 因此对于大块内存,GPU提供最佳的内存带宽, 同时几乎没有由于线程并行延迟而导致的缺点.