
linux
文章平均质量分 55
fananchong2
这个作者很懒,什么都没留下…
展开
-
看 MySQL InnoDB 和 BoltDB 如何写磁盘
DB 产品,会 WAL 后再写磁盘;WAL 日志又称 redo 日志,用于失败时的恢复操作。BoltDB 的实现构思巧妙,相当于新建 1 棵 B+ 树,原子切换 meta 页。看下 MySQL InnoDB 存储引擎、 BoltDB 是如何解决该问题。需要写的页数 1 页到 N 页不等(数据少,就在 meta 页)BoltDB 当前 meta 页指向磁盘 B+ 树。因为实际磁盘页未被写坏,因此总能 redo 正确。该页使用 redo 日志文件也无法恢复正确了。原创 2025-03-11 18:33:24 · 299 阅读 · 0 评论 -
使用 gdb 脚本捕获 crash 时的 stack
原来我的做法是,用 signal 在程序内注册异常处理句柄,执行 gdb 命令。脚本内容都是 gdb 的命令,很简单,可问 ChatGPT。这段脚本,可以在程序 crash 时,把堆栈信息,存入文件。相比而言,这种方法更轻便、灵活,且无侵入性。原创 2024-07-03 12:29:15 · 303 阅读 · 0 评论 -
离线 Linux 开发环境搭建
虚拟机可以使用 Windows 自带的 Hyper-V。内网需要啥软件,外网虚拟机下载好安装包,拷贝至内网安装。思路,内网和外网均创建一个环境一样的虚拟机。通常受限网络,网络模式更为复杂。无法连接外面的内网开发。原创 2024-04-05 11:06:34 · 690 阅读 · 0 评论 -
EmmyLua 远程调试 Lua 代码
项目中用到 LuaJIT ,正常思路静态链接了 LuaJIT 库。这导致了 EmmyLua 不能用。可以设置 export LD_LIBRARY_PATH=/your_so_path。EmmyLua 可以调试 C++ Lua 混合编程的项目。先启动项目要调试的服务;程序动态链接,需要寻找 so。原创 2024-03-28 18:23:07 · 823 阅读 · 0 评论 -
网络卡问题排查手段
因为遇到这种情况,服务通常是不健康的,线上监控系统通常就已经在告警了。笔者就遇到过这样的问题,最后排查下来,只有韩国棒子用某运营商业务的手机网络出问题。对后端来说,网络卡了问题,本身很难去排查,因为是 App 通过互联网连接服务。如果能让玩家直观的感受到是网络卡而不是其他,这样上报的 bug 就更有针对性。根据这些信息,聚合成图表,对下事发事件,直接就可以排查是否是这个问题。开发过程中,通常就会解决掉了。比如,游戏画面上显示 Ping 延迟,就是一个好方法。特别是出海的游戏,遇到网络问题,首先就是拨测下。原创 2024-01-20 14:40:53 · 1014 阅读 · 0 评论 -
Ubuntu 虚拟机挂接 Windows 目录
如果没有这个参数,Ubuntu 下会无法更改文件目录的权限,导致 chmod 命令执行无效。我这里偷懒直接直接 Everyone ,也可以指定用户啥的。这对于 git 库下的文件会导致都有 diff 差异。然后把刚才的 mount 命令写到。首先 Windows 下共享目录。Ubuntu 默认没开启。这里打印的是已开启的。原创 2024-01-06 15:43:39 · 744 阅读 · 0 评论 -
思考(九十三):网络加速器简单实现设计
【代码】网络加速器简单实现设计。原创 2023-12-26 11:15:04 · 346 阅读 · 0 评论 -
dnsmasq 调优与压测
修改 /etc/dnsmasq.conf ,然后重启服务。dnsmasq 是一个 dns 服务器。可以使用 dnsperf 工具。原创 2023-05-13 16:47:47 · 1286 阅读 · 1 评论 -
zsh 安装(备忘)
修改 .zshrc ,设置: ZSH_THEME=“powerlevel10k/powerlevel10k”配置,终端输入: p10k configure。原创 2022-12-27 20:17:31 · 245 阅读 · 0 评论 -
gdb 调试(备忘)
在 ~/.gdbinit 中,添加 gdb-stl-views 脚本。通常代码使用智能指针等,编码很灵活,不一定用全局容器去维护。可以事先对比较重要的对象,在构造时, log 其地址。会造成 gdb 调试时,得到想要的对象信息比较难。这样, gdb 调试时,随时可以打印它,方便调试。gdb 中,执行命令。原创 2022-11-26 11:52:27 · 708 阅读 · 0 评论 -
Etcd 2G 磁盘容量问题(备忘)
上面粗暴执行 compact ,遇到 ttl 已为 0 的 KV 直接被删除。但是有时,某些应用,希望 Etcd 2G 故障时,不要粗暴马上清除。因此,最好不要手动执行 compact 到最新 revison ,或者 compact [ revison - N ] 版本。网上搜了下, Etcd 后端存储 boltdb 超过 2G 容量,会提示。异常,导致 Etcd 无法正常提供服务。,保留最近 1 小时历史记录。原创 2022-09-15 23:31:01 · 635 阅读 · 0 评论 -
CMake 自定义输出(备忘)
CMake 自定义输出原创 2022-08-25 23:44:46 · 325 阅读 · 0 评论 -
一次联合编译器问题排查(备忘)
于是看了下该进程的命令行,确定在编译,但是命令行的编译文件,已经被联合编译器重名为 uuid 型文件名了。其他 CPP 文件很快编译完成,但是卡在 1 个非常慢速的 CPP 文件编译上,导致整体时间被拖垮。查看编译记录,似乎联合编译器不怎么正常了,大多数均在本地打包机上编译 C++ 代码。修改调度算法后,可以确认联合编译器是正常工作的,每个从机都有 C++ 在编译。最开始以为,联合编译器坏掉了,因此重新安装升级了联合编译器,结果还是一样。之前使用联合编译器,从没认真思考过,想当然认为机器越多编译速度越快。原创 2022-08-23 22:39:26 · 696 阅读 · 0 评论 -
自定义编译与分布式管理
需求常见的有分布式代码编译,如 icecream fastbuild 等分布式编译 C/C++ 代码有时候,会有其他类似需求,执行某种操作,与编译代码类似,但不是编译代码通常可以有 2 种常见的做法:使用 jenkins pipeline伪造 gcc 程序,使用 icecream fastbuild本文主要介绍如何伪造 gcc 程序,骗过 cmake make icecream fastbuild 等等工具例子github 地址: https://github.com/fananchon原创 2022-05-20 18:39:31 · 283 阅读 · 0 评论 -
Cgo 异常捕获,不退出
问题最近有网友问,怎么 Cgo 异常捕获,不退出: https://github.com/fananchong/test_cgo_coredump/issues/2这里做了个例子,记录一二之前本人也写过 《cgo crash 捕获 go 调用栈、 c 调用栈》 ,加上本文,可以实现完美的异常捕获框架异常捕获,处理代码//go:build !plan9 && !windows// +build !plan9,!windowspackage main/*#include &原创 2021-12-25 22:52:02 · 1303 阅读 · 0 评论 -
Redis Docker 集群测试环境
Redis Docker 集群测试环境github : https://github.com/Grokzen/docker-redis-cluster 提供了一个简单启动一组 Redis Docker 集群测试环境的镜像执行命令:set -exdocker rm -f redis_clusterdocker run -d --name=redis_cluster --restart=unless-stopped \ -e "IP=0.0.0.0" \ -p 7000-7005:70原创 2021-11-15 17:44:17 · 1288 阅读 · 0 评论 -
Go 程序释放不用的内存
Go 程序内存通过 pprof 发现,一个 Go 进程实际 in use 内存只占用几百兆,实际物理内存占用了 4、5G原因很清晰,进程的内存分配器,没有把空闲内存还回系统挤兑内存可以通过挤兑内存的方式,触发进程归还内存#include <stdio.h>#include <string.h>#include <unistd.h>#include <cstdlib>int main() { char *p = NULL; c原创 2021-09-30 15:03:34 · 3340 阅读 · 0 评论 -
git-p4 多个分支与版本合并 merge
git-p4git-p4 基本操作,见 https://blog.youkuaiyun.com/u013272009/article/details/120166796多个分支假设已经用 p4 sync 同步了 2 个 p4 分支:clientclient typep4 远程地址本地目录tl_fananchong_vm1stream client//Torchlight/MainLineWithUGS/backend//home/fananchong/MainLineWithUGS原创 2021-09-25 18:29:30 · 1086 阅读 · 0 评论 -
fsnotify 与 too many open files
fsnotifyfsnotify 是用来监听文件、目录变化的一个 golang 开源库在 Linux 系统使用中,遇到了too many open files问题首次尝试通常,有 2 处配置太小,会触发too many open files错误:/etc/sysctl.conf文件中的fs.file-max/etc/security/limits.conf文件中的hard nofile与hard nofile因此,更改了相关值:[root@qa5 ~]# ulimit -a | grep原创 2021-09-22 21:55:33 · 2637 阅读 · 0 评论 -
使用 icecream 联合编译 Linux 下代码(备忘)
icecreamgithub 地址: https://github.com/icecc/icecream是基于 distcc 实现的,相比较 distcc 有以下优点:安装部署简单,自带调度器。 distcc + dmucs 方式, dmucs 部署过于繁琐能打包本地编译环境,不需要手动对齐所有编译机的编译环境编译 icecream用yum install icecream可以安装 icecream ,是 2017 年的版本,且测试下来有问题因此选择编译 icecream 的方式安装 ic原创 2021-08-22 21:32:47 · 1583 阅读 · 0 评论 -
linux 下使用 distcc 联合编译 c++ 代码(备忘)
distccdistcc 可以用来联合编译 linux 下代码github: https://github.com/distcc/distcc编译机安装 distcc 服务器开发机安装 distcc 客户端下面介绍安装过程安装 distcc 服务器类似以下命令:#!/bin/bashset -exyum install -y centos-release-sclyum install -y devtoolset-7-gcc devtoolset-7-gcc-c++yum instal原创 2021-08-21 22:44:18 · 1250 阅读 · 1 评论 -
进程内存占用统计(备忘)
/proc/{pid}/status可以通过读取,/proc/{pid}/status 文件来获取,进程物理内存占用情况malloc_statsmalloc_stats ptmalloc 中用来打印内存分配情况的一系列函数之一代码例子#pragma once#include <iostream>#include <string.h>#include <sys/stat.h>#include <sys/sysinfo.h>#include原创 2021-07-19 17:20:33 · 570 阅读 · 0 评论 -
Redis 阿里云集群基准测试(备忘)
Redis 规格阿里云 16G 集群性能增强版(8节点)测试命令redis-benchmark -h r-2ze3o0uxns7tx1zkpz01.redis.rds.aliyuncs.com -p 6379 -n 1000000 -r 100000 -c 100 --dbnum 1 -d 1024 -t set,get该命令含义:分别考察 Redis 命令 set,get每个命令执行 1000000 次(参数 n)选择的键值随机空间大小为 100000(参数 r)每次操作数据量大小原创 2021-07-12 18:22:24 · 313 阅读 · 0 评论 -
gRPC etcd-cpp-apiv3 windows 下编译
介绍gRPC 编译依赖 : openssletcd-cpp-apiv3 编译依赖: openssl grpc boost cpprestsdkc++ 最不友好的地方,就是编译,非常耗时。一两天的时间,就花在编译上!编译 openssl编译工具说明perlhttps://strawberryperl.com/download/5.32.1.1/strawberry-perl-5.32.1.1-64bit.msinmakeVisual Studio 2019编译过程原创 2021-06-27 20:02:21 · 718 阅读 · 2 评论 -
valgrind 使用备忘
valgrindvalgrind 是 c++ 程序的一个性能分析工具优点:无需侵入代码安装 valgrindCentOS:yum install valgrindqcachegrindqcachegrind 用来图形化,显示性能点下载安装包: https://sourceforge.net/projects/qcachegrindwin/使用类似以下命令:valgrind --tool=callgrind --separate-threads=yes <命令>说明:原创 2021-06-21 19:16:51 · 353 阅读 · 0 评论 -
etcd-cpp-apiv3 编译(备忘)
etcd-cpp-apiv3etcd-cpp-apiv3 是 C++ Etcd client api 库见官方客户端库,推荐页: https://etcd.io/docs/v3.4/integrations/Github 地址: https://github.com/etcd-cpp-apiv3/etcd-cpp-apiv3.gitetcd-cpp-apiv3 依赖:boostgrpcprotobufcpprestsdk由于官方 README.md 中的编译方式,并不是本人想要的方式原创 2021-06-12 21:09:35 · 1232 阅读 · 3 评论 -
使用 DNS 启动 Etcd 集群搭建(备忘)
Etcd 集群Etcd 集群搭建有很多种方式,官方文档: https://etcd.io/docs/v3.4/op-guide/clustering/本文介绍使用 DNS 启动 Etcd 集群搭建: https://etcd.io/docs/v3.4/op-guide/clustering/#dns-discoveryEtcd 启动脚本使用以下脚本:#!/bin/bashif [ $# -lt 8 ]; then echo "Usage: $0 <name> <dns原创 2021-04-11 13:59:08 · 673 阅读 · 0 评论 -
grafana 生成报表(备忘)
Grafana Image Renderergrafana 通过安装插件 Grafana Image Renderer ,来实现抓取需要的报表安装脚本类似:docker run -d --name grafana-image-renderer --restart=unless-stopped \ -e HTTP_HOST=0.0.0.0 \ -e ENABLE_METRICS="true" \ -p 8081:8081 \ $HOSTS \ $DOCKER_URL/torchli原创 2021-02-02 11:42:22 · 2854 阅读 · 0 评论 -
测试网卡 PPS(备忘)
准备目标机、辅测机各 1 台2 台机器,安装 iperf3yum install -y iperf3测试目标机运行:iperf3 -s -i 1 -p 16000辅测机运行:iperf3 -u -l 64 -b 10g -t 86400 -c [IP] -i 1 -p 16000 -A 1目标机运行:sar -n DEV 1 320 | grep [网卡名]说明辅测机 iperf3 参数 -u必须 -u 自定义 UDP ,才能准确测试 pps-t TCP 的话原创 2020-12-24 10:47:11 · 4253 阅读 · 1 评论 -
Hyper-H 桥接模式与挂载宿主机目录
前言Windows 10 自带的 Hyper-H,随 Windows 10 开机启动,并无感加载其管理的虚拟机,确实方便本文介绍下,在使用 Hyper-H 过程中,一般都会遇到的一些问题:使用桥接模式,暴露虚拟机到内网挂载宿主机目录到虚拟机VSCode Remote-SSH 虚拟机了解并动手下上述 3 点,基本可以到,Windows 10 下,打开 VSCode IDE 无感操作虚拟机与本地目录桥接模式做 Hyper-H 桥接模式,都是界面操作,这里就直接上图说明打开创建虚拟交换机原创 2020-10-18 17:14:57 · 1172 阅读 · 1 评论 -
jenkins 触发远程 job 并返回值(备忘)
远程 job有时候,可能会有 jenkins 1 任务过程中,有步骤执行 jenkins 2 中的构建任务这个时候就需要触发远程 job 并检查返回值具体过程jenkins 开启 SSH serverhttps://wiki.jenkins.io/display/JENKINS/Jenkins+SSH添加公钥https://www.jenkins.io/zh/doc/book/managing/cli/https://docs.github.com/en/github/auth原创 2020-09-09 11:37:01 · 2547 阅读 · 0 评论 -
CentOS/Ubuntu 中文字符集设置(备忘)
CentOS 7安装中文字符集:yum -y install kde-l10n-Chineselocaledef -v -c -i zh_CN -f utf8 zh_CN.utf8localedef -v -c -i zh_CN -f gbk zh_CN.gbklocaledef -v -c -i zh_CN -f gb2312 zh_CN.gb2312查看是否已经安装:locale -a更改字符集:vim /etc/locale.conf填写要使用的字符集,如: zh_CN.gb原创 2020-08-17 15:41:22 · 526 阅读 · 0 评论 -
RocketMQ安装、部署(备忘)
RocketMQ这段时间接触了不少 MQ 产品,印象最为深刻的,当属 RocketMQ个人认为其架构设计的十分合理官方地址: https://github.com/apache/rocketmq使用下来,最开始的安装、部署,遇到不少问题,因此特地备忘下主要问题均来至 JDK 版本比官方的新安装相关官方文档: https://rocketmq.apache.org/docs/quick-start/安装需求:64bit OS, Linux/Unix/Mac is recommended;(原创 2020-07-08 17:58:12 · 389 阅读 · 0 评论 -
文件读写性能的一些测试总结
背景最近替换了项目内部的 log 库,使用 spdlog 开源库:github 地址: https://github.com/gabime/spdlogspdlog 在主页中所提及到其性能达: 5,777,626/sec ,惊为天人因此认真阅读了 spdlog 源码,做了些实验,摸底了下文件读写性能fwrite 函数用户态函数,作用:把文件数据从写到用户态缓冲区缓冲区可以通过 set...原创 2020-01-19 12:20:21 · 1409 阅读 · 0 评论 -
一次伪内存泄露
背景压测发现,机器人关闭后,内存没有减下来,初步判断是内存泄露内存泄露排查 - Review 代码包括static 静态变量extern 全局变量单例中的容器字段没有发现异常的地方内存泄露排查 - 使用 gperftools dump 内存分布情况gperftools 相关知识可以参考: https://github.com/fananchong/gperftools_sam...原创 2019-12-03 18:54:03 · 434 阅读 · 0 评论 -
VS2017 编译调试 Linux 程序
参考文档官方文档1:https://blogs.msdn.microsoft.com/vcblog/2017/04/11/linux-development-with-c-in-visual-studio/官方文档2:https://blogs.msdn.microsoft.com/vcblog/2018/04/09/intellisense-for-remote-linux-he...原创 2018-07-12 22:36:46 · 15162 阅读 · 2 评论 -
VS2017 使用 CMake 编译调试 Linux 程序
参考文档官方文档:https://blogs.msdn.microsoft.com/vcblog/2017/09/14/cmake-support-in-visual-studio-cmake-3-9-linux-targeting-feedback/ https://blogs.msdn.microsoft.com/vcblog/2016/10/05/cmake-support-in-...原创 2018-07-14 01:20:54 · 7730 阅读 · 0 评论 -
WSL 中安装 docker cli (备忘)
参考至 : https://www.cnblogs.com/xiaoliangge/p/9134585.html安装 dockerapt-get install docker-io修改配置vim ~/.bashrc添加 export DOCKER_HOST=tcp://127.0.0.1:2375source ~/.bashrc勾选下图功能...原创 2018-07-26 15:53:34 · 1341 阅读 · 0 评论 -
基于 win10、vs2017 开发 C++ Linux 程序的一些技巧
windows 下的 Linux 程序开发目前 windows 全面支持在其操作系统下进行 Linux 程序开发。主要用到以下工具:vs2017vcpkgWSL (windows subsystem linux)cmakedocker for windows除了 cmake,其他的都算是 windows 自家的产品。而 vs2017、vcpkg 全面支持 cmake...原创 2018-07-21 12:46:51 · 2622 阅读 · 0 评论 -
WSL 中 docker 挂接目录问题
问题WSL 中如 C 盘被挂接到 /mnt/下,因此路径为:/mnt/c而 docker for windows 中, docker run -v 挂接目录需要真是路径:/c因此会造成 如下命令在 WSL中挂接失败:docker run -v $PWD:/aaa ...(省略)...解决github上已经有 issues:https://gith...原创 2018-07-26 16:31:52 · 5360 阅读 · 0 评论