windows内存泄露一则——搜狗输入法

今年目前仅有两起内存泄漏,其中一起就是搜狗输入法,还有一起则是和 filebeat 有关。

搜狗输入法自从 21 年被腾讯全部合并后,广告业务突飞猛进,还夹杂各种软件,与百度全家桶不相上下。

且不管商业或者道德上的问题,增加这么多业务后肯定造成了程序代码库的膨胀,功能的稳定性想必亦有影响。输入法这一系统组件和系统内核与驱动都有交互,与每一个窗口也都有交互,对系统影响可想而知。

前文一致,这次还是服务器A。

2025/12/18:

2025/12/25:

内存不足报警:

重启服务NetSign释放约1G,之后重启某业务服务释放2[……]

继续阅读

修复DebugDiag无法读取.net4.8 dump文件的问题

鸣大钟一次!
注入电流,点亮数据中心,默念主名…
鸣大钟两次!
敲击回车,启动集群,连接网络,祈求吾主降临…
鸣大钟三次!
齐声歌唱,赞美全知全能之神!

前文所述,DebugDiag 是一个非常好用的工具,可以自动化分析 dump 文件。

但微软爸爸在坑人这件事上永不止步。DebugDiag 读取.net4.8 dump文件选择内存分析会报错。

观察发现程序异常堆栈在 Microsoft.Diagnostics.Runtime.dll 中,该 dll 是分析 dump 文件的核心类库,最新版本已是 4.0.0-beta,但 DebugDiag 仍引用 0.9.2 这一上古版本[……]

继续阅读

windows内存泄露四则

比较稳定得干了这么多年,谁能想到一年内能处理4起内存泄露问题呢?

第一则比较简单,运营人员操作时遭遇经典弹窗《计算机的内存不足》。打开任务管理查看,未发现高占用的应用程序。

找运维获得管理员账户,打开任务管理器,发现亚信安全杀毒软件进程占用内存最多。运维通过管理后台卸载杀毒软件后恢复正常。

问题反馈软件厂家,厂家调查回复,用户登录时会在右下角弹出软件运行状态窗口,该窗口存在内存泄露问题,假如用户未关闭该窗口,则会一直泄露内存,最终导致内存不足。

因为该问题发生多次,(服务器会有很多登录后不管的session),部分服务器由运维统一卸载该软件以解决问题。

[……]

继续阅读

svn迁移git小记

迁移本身并不复杂,甚至直接拷贝文件后新建 git 目录也是可行的。若要保留提交历史则可以参考了解如何从 Subversion (SVN) 迁移到 Git(包括历史记录)和官方的迁移到 Git

现在发行的 windows 版 git 工具已经自带 svn 模块,但实际操作时因为各参考命令的环境不同,需要在 powershell 和 git bash 环境不断来回切换,这一点就比较费力。

对于迁移而言,首先需要一个 svn 用户和 git 用户的转换关系。在powershell 中执行以下语句导出 svn 用户列表,但 Out-File 默认格式是 utf8,git 不支持读取带 B[……]

继续阅读

.net dump文件自动化分析工具DebugDiag

实乃后知后觉,作者去年才发现微软爸爸提供了一个自动化的dump分析工具DebugDiag,提供内存、cpu、进程崩溃等问题的自动分析,可以免受使用windbg 之苦。

下载地址:v2.2v2.3.2

其中 v2.2 最低支持 win2008、win7 这一代系统,而 v2.3 开始最低支持win2012、win8这一代系统,以及仅支持64位。

操作还是非常简便的,分析完成后生成一个网页形式的分析报告。网页上还提供快速导航。

比如说该报告是一个性能分析报告,分析器遍历了所有线程堆栈顶部的函数,枚举了top40。

同一个dump文件使用死锁分析,则能得[……]

继续阅读

.net运行中慢函数分析

程序在开发机上借助 IDE 的工具进行性能分析是非常简单的,但在程序在正式环境运行时进行慢函数分析就比较困难。这里介绍2个工具,CVCollectionCmd PerfView,借助它们的力量(性能计数器和其他系统探针)可以对 windows 中运行的 .net 程序进行运行中分析。

CVCollectionCmd 实际是 Visual Studio 的非自带官方扩展——并发可视化工具的独立命令行工具,可以独立于 Visual Studio 运行。除了可以直接 Open 启动一个进程外,还可以 Attach 现有进程。

# 启动
"C:\Program Files (x86)\M[......]

继续阅读

在asp.net core中使用grpc和进行性能测试

代码地址:https://github.com/HDRorz/WorkDayProject

这个 grpc 在 20 年.net core 3.1 release 时就看到官方最新鲜的文档,就着手开始开发了,依旧以工作日服务这个功能实现了服务器端和客户端。然而开发过程并不是一帆风顺的。

protobuf 默认定义的数据类型中并不包含时间,这令人略感意外,这就需要另外进行处理,引入时间类型,这需要在 proto 文件增加一行引用。

这又带来一个新问题,vs 无法编译这个 proto 文件,在通过一连串莫名其妙的操作后(其实是我已经忘了),项目终于恢复正常。

当然这个时[……]

继续阅读

中文编码小记

作为一名中国程序员,甚至只是一名普通用户,编码问题一直困扰着我们的生活。包括 txt 乱码、网页乱码、程序乱码都屡见不鲜,各种“烫烫烫”和“棍斤拷”,还有方块?和莫名繁体。

字符编码相关知识:

常见乱码解决方案:

《常见乱码问题分析[……]

继续阅读

CJKEncoding 一种编码算法

代码地址:https://gist.github.com/HDRorz/761c8850b91bf25d323c40eab9898c91

一、缘由

因为某一天在论坛里突然看到一种上古加密通讯语言:佛曰。至于加密了什么内容,在这里不能说。就想到最近几天搞的数据库连接字符串加密功能里用到的base64 编码。base64 编码用处广泛,可以把字节(0-255)数组转化为 ASCII 码(0-127)中的可显示字符 64 个,这个 8 位 -> 6 位的编码和解码规则简单且万能,常用于邮件(utf-7)、url 和加解密(秘钥和密文存储)。

但是 base64 有个明显的缺点,就是他[……]

继续阅读

数据库作死指南(二)——优化

一、配置

首先有一点必须要明确,数据库服务器配置越强,肯定跑的越快。最影响数据库性能的肯定是硬盘,因为数据库的可靠性是靠写入磁盘实现的,由于短板效应,硬盘这个计算机最慢的东西决定了性能。SSD 是高性能最不可缺少的一部分,而且对于 SSD 来说,容量越大,速度越快。对于云主机来说则有一个 IOPS 的指标,在多租户的环境下,云服务提供商提供的虚拟化设备对单机的 IOPS 有固定的限制,会影响性能(当然包括超售)。

第二就是内存,内存影响缓存的大小,假如数据都缓存在内存中,那数据库查询速度肯定是和 Redis 之流是一样的。而且我们使用 Redis 这些内存 kv 数据库的最主要原因[……]

继续阅读