现场工程师
文章平均质量分 73
介绍在现场应急、故障运维开发中的典型实践和解决经验。
丁劲犇
眼花了,再写两年博客准备送给儿子了。
展开
-
现场工程师出手--使用 sysinternals::Rammap64 解决大吞吐下虚拟机耗尽宿主内存的问题
一位学生有一台笔记本电脑,安装了Android,Kafka虚拟机很多软件。笔记本配置了20GB内存,固态硬盘,但最近很卡,Android Stuido经常闪退,一些游戏也无法运行。最终发现是因为虚拟机预留内存过大,导致其他软件无法启动。最终,通过 [sysinternals::Rammap64](https://learn.microsoft.com/zh-cn/sysinternals/) 工具集,分析了内存占用,并采用任务计划和定期清理功能保证系统健康。原创 2024-05-10 13:36:54 · 667 阅读 · 0 评论 -
解决 MSYS2 Qt 6.7 默认 stylesheet 在 windows 11 下的显示故障
MSYS2 升级到 Qt6.7.0,发现显示故障,所有Qt6程序以及 QtCreator的SpinBox都显示不全,Combox的底色不对。使用Qt的命令行选项--style fusion 可以选择其他主体暂时绕过该 BUG原创 2024-04-13 19:33:21 · 576 阅读 · 0 评论 -
现场工程师实录-又是机械盘阵高并发!解决FTP大延迟断网问题
从2023年九月开始,朋友公司一直存在FTP断网问题。陆续查找各种原因,却一直没有解决。昨天见到他,才知道直到2024年初,经过多次折腾,更换交换机1台,服务器1台,客户端计算机N台,总算定位到故障源头,发现了由盘阵高并发导致的网络TCP排队高延迟问题。原创 2024-02-07 20:41:41 · 1011 阅读 · 0 评论 -
用git bash调用md5sum进行批量MD5计算
对于非常大的文件或者很重要的文件,在不稳定的网络环境下,可能文件的某些字节会损坏。此时,对文件计算MD5即可以校验其完整性。最简便的方法是使用git自带的md5sum进行计算,借助find批量匹配执行,用diff查看差异。原创 2024-01-19 13:12:31 · 1250 阅读 · 0 评论 -
使用软件解决T490笔记本57摄氏度温度墙的问题
客户使用LenovoT490跑GQRX SDR,接入SDR在5MHz采样率下,机器卡顿。这对于10代i7CPU显然是不正常的。后续发现上网页也卡,卸载杀毒、重装系统、BIOS电源设置、系统最大性能、主动散热全部设置后,故障依旧。最终按照网上教程,通过安装软件解决了问题。原创 2023-12-31 10:09:59 · 1454 阅读 · 0 评论 -
使用MSYS2的静态Qt版本进行Widgets项目编译时需要注意的问题
需要编译一个静态版本的应用程序,并用upx进行压缩,以便减少携带的动态链接库,生成每个文件不超过10MB的轻量级绿色发布包。使用动态库不利于发布。准备发布的环境,是学校的教学中心的学生计算机。学生计算机的每一台机器都可能安装有不同版本的Qt,且时常污染环境变量(PATH),导致链接了其他版本Qt的程序启动时遇到问题。不能为每一种Qt发布包编译一个发行版。本文介绍使用msys2编译静态Qt6程序的注意事项。原创 2023-10-29 14:39:36 · 527 阅读 · 0 评论 -
本是同根生-双数据库集群keepalived virtual_route_id冲突导致连接故障
一企业近期陆续开始升级办公与大数据系统,新的承包商。原有的数据库是某国内大品牌A,现在新的功能准备陆续迁移到大品牌B上。A,B数据库都源自postgresql,且采用同样的 keepalived配置,导致子网内的 虚拟路由ID冲突。原创 2023-09-06 19:04:55 · 519 阅读 · 1 评论 -
现场工程师宝典-流式处理的异常现象以及提高吞吐能力的常见优化策略
流式处理区别于按包处理,指的是对处理者而言,面对的是逻辑上无头无尾的数据流。因此,在提取数据流中的包时,就需要遵循其内在的格式,进行头部捕获、提取、校验。然而,如果不考虑TCP等流式数据的异常情况,而简单的编程,会在性能、稳定性上踩坑。本人作为资深现场工程师,协助开发团队处理过各种千奇百怪的流式处理问题,本文把其中较为常见的一并总结一下,希望对避坑有所帮助。原创 2023-07-07 20:08:48 · 437 阅读 · 0 评论 -
现场工程师出马:VMware+LVM卷快速在windows Server上部署Kafka集群
最近遇到的疑难现场问题层出不穷,本次遭遇的挑战是在4台windows Server 服务器上部署Kafka集群。这是一种比较少见的操作,原因是有些依赖的驱动对虚拟化支持不好,只能运行在实体win机上。原有的上层业务是由B团队开发+运维,现在B团队自己独立出去单干,需要把B团队的业务流转移到这4台windows 服务器上。因为老丁同学介绍,我现场指导了这次迁移,并不顺利,特此记录。主要解决了基于VMWare虚拟机的Linux Kafka节点在windows 服务器的部署。原创 2023-05-10 20:46:19 · 709 阅读 · 0 评论 -
现场工程师救火-UEFI(BIOS)节能设置导致金牌服务器只跑出龟速
近期协助出现场,解决了一个非常典型的UEFI 启动参数配置不当导致的服务器降效案例。错误的节能参数配置,导致价值几十万的服务器变成龟速服务器,并造成严重的生产事故。原创 2023-04-25 19:52:10 · 1114 阅读 · 1 评论 -
用于小规模低成本场景的kafka + eCAL架构设计
Kafka作为存储、性能兼备的消息队列,适用场景很多,伸缩性也很强。如何调节kafka的配置参数,以及设计专题、分区的数量、物理位置,很大程度上影响到整个架构的成败。很多文章是站在数据中心的角度来谈kafka的配置,而对于小团队,往往只希望把Kafka作为一个跨进程、可追溯的隔离器来使用,取代繁琐的文件或者自定义TCP/UDP接口。此时,单独讨论这种场景就显得有必要了。本文介绍了在磁盘与网络带宽都捉襟见肘的情况下,如何使用两种消息队列综合设计架构,避免瓶颈的方法。原创 2023-03-20 20:28:30 · 437 阅读 · 0 评论 -
基于Qt WebEngine 的Web仪器面板GUI程控技术
随着IIoT的发展,很多工业仪器也具备了远程管理的GUI。与早期使用串口进行命令交互不同,这些GUI可以直接在远程呈现数据。作为希望对仪器、软件进行二次开发的小公司来说,会遇到GUI人工操作转自动化的需求。在无法通过串口等传统接口进行自动操作的情况下,就只能考虑GUI自动化。在现场工程师领域,常见的GUI自动化程控技术主要分native界面与Web界面两类。用QtWebEngine可以非常从容地应对Web GUI自动化。原创 2023-03-09 13:47:49 · 2216 阅读 · 0 评论 -
由老旧计算机引出的麻烦事儿
最近,一个做运维的朋友准备为公司客户部署一套物流跟踪3D WebGIS应用,遇到了问题。我作为请来的臭皮匠之一,因为帮忙看了几个数据库、GIS的问题,顺带基本了解了全部过程,其中有些过程值得记录,和大家分享。好的开始乙方准备重构的这套系统,原本是很成熟的,只是很老旧了。据说,做系统的公司已经关门,系统用VB/SQL2000做的开发,地图用的是分辨率很低的示意图。本着一步到位的思路,朋友.........原创 2018-04-01 23:39:23 · 531 阅读 · 1 评论 -
现场工程师出手-PCAPHub与云SSH隧道稳妥实现异地LAN IIoT联测
在传统制造业、互联网,以及所有和工程相关的领域,都会生长着一类非常硬核的攻城狮。他们不仅是行业全栈工程师,又具有非常丰富的现场经验——编程、电气、电子、万用表、电烙铁都能来上两招。具备这种“急诊医生”能力的技术人员,有正规的定义,叫做“现场工程师”。本案例就介绍现场工程师的应变,通过PCAPHub与云虚拟机,实现甲方、乙方异地交换机的逻辑直通。在文章的最后,还会讨论现场工程师的能力与素质。原创 2023-01-20 13:52:31 · 1235 阅读 · 0 评论 -
基于PCAP搭建软HUB实现物联网在线调试
在调试嵌入式物联设备时,尤其是在多个以太网物联设备交错通信的情况下,很难通过在捉襟见肘的嵌入式系统上进行数据记录与调试。如果设备连接的是交换机,在空闲端口是无法看到所有其他端口上的数据的(广播除外)。PCAPHub基于PCAP,构建了一个软集线器。进行调试时,把待调试的工业设备从工业交换机断开,并临时接入在调试工作站的网卡上。这样,就可以用Wireshark抓到所有参与调试的设备数据。原创 2023-01-09 07:45:00 · 907 阅读 · 0 评论 -
EthernetOnTCP--基于Qt QSslSocket 套接字在PCAP 集线器上实现以太网隧道
我们使用PCAP建立了本地的软件集线器(Hub)。考虑到较远距离的跨车间调试,有必要使用Tcp连接构造一个以太网的隧道,使得两个车间之间的调试设备可以虚拟的连接在一个Hub上。使用QSslSocket可以方便的实现这个功能。同时,通过控制回放的范围,可以精确控制PCAPHub工作在交换机-集线器的混合模式下。原创 2023-01-14 17:18:53 · 1000 阅读 · 2 评论 -
谁删了服务器?谈VC源码字符集和回车换行注意事项
在Windows Visual C/C++编程时,经常需要从Github或者其他既有项目中“借鉴”(呵呵哒)一些代码过来。这个时候,就要格外注意字符集和回车换行带来的编译问题。这类编译问题造成的错误千奇百怪,可能在编译时、链接时,甚至运行时造成困扰。尤其是运行时,很难发现,在极其倒霉的时候,会造成删库跑路或者惨痛的事故。原创 2022-08-24 21:35:39 · 573 阅读 · 0 评论 -
【已解决】MSYS2 QtCreator Clangd 代码分析找不到 mm_malloc.h的问题补救
近期学校的机房里升级了msys2,遇到了QtCreator的代码提示"In include file : 'mm_malloc.h' file not found"问题,不算完全解决,因为要上课,采用了临时的补救方法。原创 2022-07-30 19:50:44 · 1336 阅读 · 1 评论 -
避坑必看:C++移植C语言结构体char短整形导致生产事故分析
C++中直接使用C语言短整形结构体成员时,要注意很多短整形的实际类型为char.如果错误的利用自动类型函数重载完成字符转换,存在把短整形ASCII化的潜在隐患。本例子是一次现实生产事故的简化介绍。.........原创 2022-06-30 20:26:56 · 600 阅读 · 1 评论 -
特性提醒-Qt6录音QIODevice::readAll()返回奇数字节。
主要的问题:我在一个项目中使用QMultiMedia模块录音,假设了 QIODevice::readAll() 每次必然返回整数组样点。比如立体声,16位,则返回的字节数必然是4的整数倍。这个行为从Qt4、Qt5都没有出问题。结果Qt6时,在Win10下返回了奇数个字节。如果不做缓存,后续的样点字节就被破坏,声音就很怪很怪。我已经在Qt的社区反馈了这个问题:A noteworthy issue: QAudioSource returns a QIODevice object, whose QIODev原创 2022-04-16 12:48:40 · 3031 阅读 · 1 评论 -
解决MSYS2 git-gui.ico 图标BUG
最近在MSYS2里面开发Qt, 遇到一个奇怪的问题。在bash里面运行 git-gui,报错:bitmap "/usr/share/git-gui/lib/git-gui.ico" not defined while executing"wm iconbitmap . -default $oguilib/git-gui.ico" invoked from within"if {[is_Windows]} { wm iconbitmap . -default $oguilib/git-gui.原创 2022-03-05 20:38:56 · 256 阅读 · 0 评论 -
现场工程师大晒:使用 ImDisk 与 junction 显著提高机械盘阵高并发吞吐性能
近期,协助朋友公司调优了一个奇葩的系统。由于盲目扩充规模,导致基于松散文件接口的多进程机械盘阵高并发计算性能下降,无法实时处理。虽然没有源码,但通过现场工程师的一顿操作猛如虎,联合 ImDisk内存磁盘、junction NTFS 文件夹链接、现场开发Qt配额控制、强制解除占用句柄,多管齐下,在24小时内完成了系统部署。原创 2021-12-23 21:52:12 · 1499 阅读 · 5 评论 -
树莓派运行Octave停止响应以及EGL无法做图显示问题解决
树莓派直接运行Ocatve GUI, 主界面会停止响应。解决步骤:1、使用管理员权限运行GUIsudo ocatve --force-gui2、配置Qt5风格qt5ct或者“首选项”菜单–>“Qt5设置”,随便给个风格,确定。3、普通用户启动ocatve就好了。...原创 2020-03-29 09:08:18 · 756 阅读 · 2 评论 -
C#读取重定向标准输入的难题
最近因为测试taskBus技术,需要在进程中重定向子进程(c#开发)的标准输入(stdin)。这样,C#子进程中直接可以Console.Read出主进程给的数据。由于前期在C++、Python2/3、Node.JS等语言上均实现了子进程,而且非常简单,所以也就没当回事儿。没想到,CSharp实现起来却是困难重重!这里特此记录:如果主进程启动子进程后,没有向C#子进程的stdin写入任何东西,......原创 2018-11-28 22:23:11 · 984 阅读 · 0 评论 -
运维-不是所有路径都返回值导致的隐含错误
近期,协助好友调试了一个PlutoSDR IIO C程序,过程出乎意料的艰难。现象程序偶然会崩溃,报各种0xc00005、堆错误、非法内存操作。即使中途不报错,退出时也会崩溃,非常不优雅。此外,64位Release每次都存在这个问题。32位 Release不是每次都出现,所有Debug版本正常。环境:windows 10编译器:mingw框架:Qt5.9初步分析初步来看,考虑到仅是R......原创 2020-03-09 23:21:20 · 752 阅读 · 0 评论 -
向Maillist投送邮件的注意事项
很多开源项目的问题解答,都使用邮件列表系统,比如 GNU mail man。 这种系统通过向特定邮件地址发送邮件,即可把问题广播给所有感兴趣的订阅者(已经事先subscribe该专题的邮件收件人 )。但是为了防止垃圾邮件,很多系统除了要求邮件格式为“plain text” 外,都还有较强的检测策略。如果不注意,就无法成功发送邮件。这些天,为了反馈这个C++ shared_ptr管理二维数组的编原创 2017-10-06 17:18:54 · 2792 阅读 · 0 评论 -
MSYS2 瘦身小攻略
MSYS2, 吃硬盘的大神MSYS2,集成了 x86 x64两个开发环境,且可以使用 pacman 进行包管理,可谓方便的很!可是,这个东东也有一个很不好的地方,就是实在太占硬盘。尽管下载的软件包一般最大也就几百兆,但这可是高压缩格式的,一旦展开,会像干燥剂喝了水一样泵长起来。以我的MSYS2文件夹为例子,安装了常用工具如 qt、boost、opencv、 fftw、Openscenegraph等...原创 2017-02-14 20:13:22 · 3693 阅读 · 1 评论 -
C/C++运维中发现的两个隐晦BUG
在维护代码的过程中,会发现一些非常隐晦的错误,只有在一些特殊情况下才会崩溃。调试这类BUG需要安排代码审查以及比较完善的边界测试才能发现。1. 不要在判断语句中修改数据,2.注意容器指针的地址变化。...原创 2016-07-28 13:39:26 · 1743 阅读 · 0 评论 -
Qt5 UI信号、槽自动连接的控件重名大坑
对Qt5稍有熟悉的童鞋都知道信号、槽的自动连接机制。该机制使得qt designer 设计的UI中包含的控件,可以不通过显式connect,直接和cpp中的相应槽相关联。然而,这种机制存在一个隐患,即控件重名,需要引起重视...原创 2016-07-09 11:40:08 · 3895 阅读 · 3 评论 -
数据库时戳字段解析欠考虑导致的运行时异常
软件中,需要从数据库中读取一个个日期、时间,而后,分离出各个成分(年月日时分秒),再做运算。使用 select xxx from tb 选出的日期被强制转换为字符串,此时,转换成的字符串格式高度依赖客户端(即程序运行的机器)的区域与语言设置。如果简单使用一种分割符号来匹配,换台机器就可能发生错误,如果解析方法不当,搞不好还会溢出。本文介绍了一个案例,以及改进建议。原创 2013-09-22 22:46:04 · 1949 阅读 · 0 评论 -
OpenMP 与 MPICH2 进行集群计算时数据分发与共享
对集群计算而言,使用MPICH2连接并控制各个节点,使用 OpenMP 在节点内充分对CPU及各个CPU核心进行并行化,是比较低成本且万精油的解决方案。在考虑是否把数据复制到各个节点时,主要考虑是复制的代价大,还是共享访问的流量大。对需要反复随机访问的数据,还是复制到各个节点。对顺序读取一次即可完成处理的数据,直接共享访问。原创 2013-09-22 23:07:48 · 3156 阅读 · 1 评论 -
PosgreSQL 索引 COLLATE 设置不当导致查询优化无法使用索引
最近在维护一个大型PostgreSQL数据库的时候,遇到了一个问题,表的某一字段明明有索引,但是执行查询的时候优化器不去使用,VACUUM、REINDEX均无效,简单的=条件,也会导致频繁的seq scan。 无奈之下,查看索引的定义,发现使用了 COLLATE "C" 选项,才记起以前看到文档里说,每个Index只支持一种Collate,这个文档原文:An index ca...原创 2012-10-19 22:55:52 · 11849 阅读 · 1 评论 -
VirtualBox ShareFolder 充当Apache2 源路径时宿主-客户机双缓存机制缺乏沟通导致的微妙问题
最近发现了一个很有意思的问题。问题的场景是在 Windows Server 2003 x64 + VirtualBox+ Ubuntu 12.04x64 , 具体有点复杂,分几步来说。 1、 apache2 设置了一个 Alias,原始的Directory 设置的是 /media/sf_images ,这个文件夹是使用VMBox的 Shared folders 从宿主的路径 E:...原创 2012-10-02 22:36:41 · 2240 阅读 · 2 评论