具体的代码在
基于dump的本地缓存实现.
本来以为很简单的一次上线,没想到前后弄了差不多一个下午.最主要的问题有三个
问题一 MD5校验不通过
这个问题在daily完全没问题.但是到了线上就悲剧了..刚开始以为是不同机器上,计算md5值不一样造成的..后来我在不同机器算了几次,发现都是一样的...继续查,才发现是自己考虑不周..
这个问题,最初的错误在于
写道
客户端在dump数据流和对应的md5值的时候,发了两次http请求.
这本身没有什么问题,但是我在服务端缓存了一份计算好的MD5的值,然后每次客户端在dump数据流的时候,会重新更新这个MD5值..这看上去也没什么问题.但是
写道
线上的机器有多台,如果客户端在dump 数据流的时候,请求到了服务器A,而在请求对应md5值的时候,请求到了服务器B..那么,dump数据流顺带更新的是服务器A中缓存的MD5值,而在服务器B中的md5值是老的..这样的结果就是,md5值不匹配.
这个属于典型的自己埋雷自己踩.解决方式也很简单
写道
解决方案很多,我觉得比较靠谱的有两种,一是缓存的md5值放在分布式缓存中,而不是本机缓存. 二就有点取巧了.在组建dump数据流的时候,在byte流最后放一段固定16进制字节码.就比如class文件的开头是CAFEBABE一样.客户端就截取这个字符串,然后做校验.
问题二 hessian版本不一致
这个问题其实在发布的时候并没有直接遇到.我是在遇到 问题三的时候,怀疑了导致问题三的原因是不是hessian版本不一致.之前我在服务端使用的hessian版本是最高的 hessian4.0.7版本.但是我在客户端查看的时候,发现很多其他的dependency依赖了hessian 3.0.13. .最后请教了一下同事,好像说这边hessian版本默认就是3.0.13.因为其他版本经常会有bug. 比如看毕玄的这篇文章
http://www.blogjava.net/BlueDavy/archive/2009/08/06/290003.html
最后的解决方案就是,统一版本 hessian3.0.13
问题三 nginx 安全模块的一个坑
在线上,客户端启动初始化的时候,一直报 hessian反序列化出错.中间折腾很久,最后发现,线上的nginx安全模块为了防止utf7漏洞,自动在请求留中加了 \r\n .具体如下
哎,整一个悲剧..
相关推荐
在IT行业中,Core Dump是一种非常重要的调试手段,它记录了程序在崩溃时内存的状态,包括进程的寄存器信息、堆栈轨迹以及内存映射等。对于开发者来说,利用Core Dump进行问题排查能够帮助我们快速定位和修复软件中的...
7. **日志记录**:在生成dump的同时,记录相关日志信息,比如错误代码、堆栈跟踪等,可以帮助分析dump文件。 8. **发送或存储dump**:在生成dump文件后,可以将其自动发送到服务器或者保存在本地,以便后续分析。 ...
DumpTool主要用来在用户机器上对目标进程生成dump文件,定位“卡死”、Crash等问题。 (1)MiniDump: 表示生成一个包含必要信息的dump文件,文件大小约200-500k,具体Flag =MiniDumpNormal|...
在Linux系统中,当应用程序因某种异常而崩溃时,系统可能会生成一个名为"core dump"的文件,这个文件记录了程序崩溃时的内存状态、进程信息以及调用堆栈等重要数据,对于开发者来说,是排查问题的重要工具。...
如DB2数据库、WebSphere应用服务器、z/OS操作系统等,都有可能产生dump文件,这些文件记录了系统运行时的内存状态、进程信息、堆栈跟踪等关键数据,用于帮助开发者和系统管理员定位并解决问题。 当IBM系统遇到故障...
面对系统崩溃时产生的内存转储文件或是数据库的备份文件(通常以"dump"格式存在),这类包含大量二进制数据的文件对于故障排查和问题诊断极为有用。然而,由于其非文本性质,直接阅读和分析dump文件通常难度较大。...
当应用程序或操作系统遇到不可恢复的错误时,它们可能会生成一个dump文件,将当时的内存状态记录下来。这通常发生在蓝屏错误(Blue Screen of Death, BSOD)或程序异常崩溃时。Dump文件包含的信息量可能很大,但它们...
Dump文件可以记录程序崩溃时的内存状态,包括堆栈信息、线程状态、内存分配等,帮助开发者定位问题所在。 "C++ 生成Dump文件"是一个关键的技术点,尤其在企业级应用中,确保软件稳定性和可维护性至关重要。以下将...
5. **异常和错误记录**:dump文件通常包含错误日志和异常堆栈跟踪,工具可以帮助解析这些信息,找出导致问题的具体原因。 6. **性能指标**:分析工具可能还提供CPU、内存和I/O等系统的性能指标,以辅助故障排查。 ...
Dump文件是一种用于记录系统或应用程序在异常崩溃时内存状态的文件,它包含了程序运行时的内存快照,通常用于故障排查和调试。将Dump文件转换为txt文本文件可以帮助开发者更方便地阅读和分析这些数据,寻找可能导致...
标题 "dump1090-win.1.10.3010.14_dump1090win_dump1090_eastixg_" 指的是一个针对Windows平台的dump1090软件的特定版本。这个软件主要用于接收和处理航空雷达数据,特别是与RTL-SDR(低成本软件定义无线电)设备...
在IT行业中,dump文件是一种常见的数据转储格式,通常用于记录系统或应用程序的内存状态,以便于调试和故障排查。本文将深入探讨dump文件、如何使用对比软件进行分析以及与IC卡相关的技术。 首先,我们需要了解dump...
首先,heapdump是一个包含Java虚拟机(JVM)堆内存快照的文件,它记录了程序运行时所有对象以及它们之间的引用关系。通过分析heapdump文件,我们可以找出占用内存较大的对象,追踪内存泄漏的源头,以及了解对象生命...
1. **生成Heap Dump**:在遇到内存问题或需要定期监控内存状况时,heapdump-tool可以生成堆转储文件。这可以通过JVM命令行参数(如`-XX:+HeapDumpOnOutOfMemoryError`)实现,也可以通过JConsole或VisualVM等可视化...
dump文件包含了程序崩溃时的内存快照,包括堆栈信息、进程和线程状态、全局变量等,可以帮助开发者分析问题的原因。在C++环境中,我们可以使用MiniDumpWriteDump函数来实现这个功能。现在,我们来详细讲解如何在C++ ...
在本文中,我们将深入探讨如何基于rtmpdump将RTMP数据包转换并解码为H264视频和AAC音频,然后将这些流打包成TS(Transport Stream)格式。RTMP(Real-Time Messaging Protocol)是一种协议,常用于实时传输音频、...
ramdump-tools是一款针对高通方案设备的专业宕机本地ramdump分析工具,它提供了比高通在线宕机分析工具qcap更为强大和便捷的功能。本文将深入探讨ramdump的基本原理、ramdump-tools的主要特性和使用方法,以及它在宕...
"Redis缓存学习记录" 一、Redis持久化机制 Redis是一种支持持久化的内存数据库,通过持久化机制把内存中的数据同步到硬盘文件来保证数据持久化。当Redis重启后通过把硬盘文件重新加载到内存,就能达到恢复数据的...
在C++编程中,捕获内存相关错误并生成dump文件是一项关键的技术,它能帮助开发者在程序崩溃或出现异常时分析问题原因。"DUMP_C++_dump_"这个标题暗示了我们将讨论如何在C++中处理内存错误并创建内存转储(dump)文件...
Core Dump 是 Linux 系统中一种特殊的文件,它记录了系统崩溃或死机时的系统状态信息。Core Dump 文件可以帮助开发者快速定位问题,解决系统崩溃的原因。 二、Core Dump 分析步骤 1. 抓取 trace:在系统崩溃后,...