Clickhouse

Clickhouse作为一种数据仓库的产品. 优点 文档清晰且有AI问答工具. 入门难度很低,拥有Mysql的经验即可. 阿里云也有其产品可以购买,生产稳定,出问题概率低. 数据压缩,存储成本低. 索引速度快. 可以直接录入Mysql作为data source. 交互协议上支持Http协议,伪Mysql协议和原生高性能协议. GUI推荐 DataGrip. SQL操作 数据管理利用TTL特性进行数据回收. 数据分布 查询 select * from system.parts limit 10; # 目前转移的数据 select * from system.mutations; 计算表大小 SELECT total_bytes/total_rows, table,database, formatReadableSize(total_bytes) AS total_bytes_on_disk FROM system.tables WHERE table = 'table'; 表转移 RENAME TABLE database.exist_table TO database.old_table, database.new_table TO database.exist_table; 数据回收 ALTER TABLE database.table DROP PARTITION '20240925'; 修改TTL ALTER TABLE database.table MODIFY TTL timestamp + toIntervalMonth(2); 查看表结构 SELECT name AS field_name, table AS table_name, type AS field_type, comment AS field_comment FROM system.

Go 内存泄漏排查

背景 某次发版后,生产机器的内存相比之前相同负载条件下使用率高,业务无异常影响. 而后带来的影响是,数据库连接资源随着pod数量提升占用提高. 间接处理 回滚版本 每隔固定时间定时重新发版 把所有依赖pkg升级至最新,把Go版本升级至最新 服务拆分,让业务链路保持简单. 直接处理 排查内存泄漏与修复 思路 复现生产环境场景 在测试环境里,对比此次版本的功能改动点进行压测,难以压测的直接for循环将变动函数调用增加10倍来调试或者将time.ticker的频率放大10倍. 使用pyroscope分析 pyroscope https://pyroscope.io/ 是基于golang的pprof工具进行采集. 使用pprof go官方自带的工具 https://github.com/google/pprof 使用perf perf是个经典的分析工具, https://github.com/google/perf_data_converter 可以将perf的分析报告转化为pprof的格式进行分析 pprof着手分析 下载heap分析文件 接入pprof后,可用curl下载分析文件 curl -o heapfile http://localhost/debug/pprof/heap?seconds=30 . 上述命令可捕获30秒的堆文件分析. 查看pprof官方自带文档 关于pprof的使用说明,请务必看完 https://github.com/google/pprof/blob/main/doc/README.md 该文讲述了 pprof字段 flat cum 代表的含义. 可通过web的方式进行UI交互或者cli方式交互. go tool pprof -http :8810 heapfile 调用图里面的颜色,矩形大小,矩形边缘粗细,虚线箭头和实线箭头的含义解释 可对比2个时间段的pprof文件,go tool pprof --base base.heap current.heap 内存采样率控制 runtime.MemProfileRate 采样率控制. 假设runtime.MemProfileRate=N,那么采样为1/N进行.如果觉得采样率小了,可以在测试环境进行调整. 空闲 Heap http://localhost/debug/pprof/heap?debug=1 有个HeapIdle指标. 下载go官方源码用IDE打开即可明白各个指标的含义,比如HeapIdle . HeapIdle = HeapSys - heapInUse

linux压测配置优化

背景 临时租赁服务器,进行灰度压测,进行大量并发cURL.测试机器压榨单机极限性能. 修改单进程句柄限制 查看进程最大文件数 # 查看进程最大文件数 ulimit -n 修改进程最大文件数 ulimit -SHn 1048576 S 表示设置软限制(soft limit)。软限制是指系统允许进程使用的资源上限,但进程可以尝试超过这个限制。 H 表示设置硬限制(hard limit)。硬限制是指系统绝对允许进程使用的资源上限,即使进程尝试超过这个限制,系统也会阻止它。 n 表示设置进程可以打开的文件描述符的最大数量 # 防止重启后失效 echo ulimit -HSn 1048576 >> /etc/rc.local echo ulimit -HSn 1048576 >>/root/.bash_profile ulimit影响因素 fs.nr_open;进程最大文件描述符数 fs.file-max;系统最大文件描述符数 修改/etc/sysctl.conf # /etc/sysctl.conf fs.file-max = 1048576 fs.nr_open=1048576 nf_conntrack_max 开启 防止配置net.nf_conntrack_max报错 # 校验conntrack是否开启 lsmod |grep conntrack # 开启 ip_conntrack modprobe ip_conntrack /etc/sysctl.conf配置修改 # 套接字优化 # 每个套接字的缓冲区大小 net.core.optmem_max= 81920 # 套接字接收缓冲区大小 net.core.rmem_max=513920 # 套接字发送缓冲区大小 net.core.wmem_max=513920 # TCP 接收缓冲区大小 net.

linux排查

Linux性能优化实战 笔记 https://time.geekbang.org/column/intro/100020901 模拟工具 stress stress 是一个 Linux 系统压力测试工具,这里我们用作异常进程模拟平均负载升高的场景 apk add stress-ng # 一个 CPU 使用率 100% stress --cpu 1 --timeout 600 # 模拟 I/O 压力 stress -i 1 --timeout 600 # 8个进程 stress -c 8 --timeout 600 sysbench sysbench 是一个多线程的基准测试工具,一般用来评估不同系统参数下的数据库负载情况 # 以10个线程运行5分钟的基准测试,模拟多线程切换的问题 $ sysbench --threads=10 --max-time=300 threads run ab ab(apache bench)是一个常用的 HTTP 服务性能测试工具 # 并发10个请求测试Nginx性能,总共测试100个请求 $ ab -c 10 -n 100 http://192.168.0.10:10000/ 排查工具 uptime 系统负载 了解系统的负载情况 $ uptime 14:42 up 56 days, 18:09, 2 users, load averages: 1.

supervisor搭建

# 下载 pip install supervisor # 初始化配置 echo_supervisord_conf > /etc/supervisord.conf vim /etc/supervisord.conf append [program:process1] command=/root/process1 autorestart=true # 载入服务 supervisord -c /etc/supervisord.conf # 启动 supervisorctl start process1 # 停止 supervisorctl stop process1 # 更新了 /etc/supervisord.conf后 supervisorctl reload

排查网络

检查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