代码改变世界

关于调试,有一个真实的故事我要讲一讲

2017-11-15 17:08 by lixiong, 阅读(1134) 阅读, 推荐(0) 推荐, 收藏, 编辑

我的第一份工作是在微软中国做技术支持。主要工作就是远程帮助微软的客户解决微软平台上的研发问题,比如内存泄漏,崩溃和死锁之类的。遇上难题我们还会用工具直接连接到客户的环境中调试。在极少数情况下工程师也会到现场解决问题。

当时有一个特别的职位叫做CPR,全称是Critical Problem Resolver。只有极少数非常优秀的工程师才够得上这个称号。任何别的工程师解决不了的问题都可以上报找更高级的工程师帮忙,这个链条的顶端就是CPR。

在我职业生涯初期,有一位CPR给了我非常多的帮助和指点。即便十多年过去了,这段经历仍旧是对我影响最深刻的。当时学到的一些技巧,即便十多年后我展示给同事看的时候,还是可以震惊全场。而这位CPR也是有史以来微软最年轻的一位。

今天要讲的故事不是关于这位CPR的。而是流传在江湖中另外一个CPR的故事。

这要追溯到2000年左右。有一个传统企业开创先河决定用微软技术自主建设企业内部IT系统。当时IT系统可是只有银行,电信这样的企业才会投入的。而且通常都是采用IBM或者SUN的大型机中型机,系统也是UNIX系列比如Solaris。采用wintel系统自主搭建IT基础设施在当时可是先河之举。该客户还额外和微软签订了咨询顾问服务。

研发结束,上线前夕,这套新研发的服务在生产环境上测试时候总是莫名崩溃,而且毫无规律可循。当时技术支持远程跟进了很多周,还是一筹莫展。逝去的时间也逐渐消磨客户的信心。眼看工程的截止日期已经不远,微软让一个CPR到现场去帮助解决。

该工程师到了现场,日以继夜地调试,排查,分析了一波又一波的dump文件,尝试着各种方法。几天以后,该工程师对客户说,生产环境的硬件坏了,你找供货商换一下就好。

客户非常的震惊,然后发怒。认为微软找不到问题就把锅踢到硬件上去。要知道当时硬件服务商可都是牛气冲天的外资企业,不会没有缘由就换硬件的。更重要的是,服务器配件当时可不是made in China,都将是要进口空运的。等硬件运来,时间也过去了,如果问题没解决那真是就没有退路了。

客户最终同意换硬件试一试,但要求微软答应一个条件:如果新硬件不解决问题,要求微软对客户前期的投入全额退款。

工程师给领导解释了下状况,领导们商量了一下,完全信任工程师的判断,答应了客户的条件。

该服务在新的硬件上运行很多天后问题都没有再发生。这就是这个故事的结局。

这个故事在我的心里种下了一颗种子。我当时就想,什么时候我的技能也可以让我在调试器中分辨出硬件问题,什么时候我才能足够自信要求客户因为程序的崩溃去更换硬件,如果还我做当时的领导,我有勇气完全支持工程师的判断吗。

十多年过去了,虽然我还在微软,但早不做技术支持了。在Azure Compute组,我们管理微软所有的服务器,包括Bing的和Azure的。我们写的软件服务运行在每一台微软服务器上,整个Azure和数据中心都是建立在其之上。

十年前做技术支持的时候,我会因为客户的某一个程序崩溃而担心,希望服务进程永远健康运行。今天客户都迁移到云上,我会因为云宿主上的服务进程崩溃而担心。在过去的几年里,我也调试过很多次莫名的崩溃,我自己的代码也差点导致极其严重的故障。我在dump里面看到过疑似的内存故障或者磁盘故障,但我却从来没有活生生的在调试器里面见证过硬件的问题。那一颗种子还在那里,直到上个周末,2017年的双十一,我终于捉住了一个机会。 http://www.cnblogs.com/lixiong/p/7818247.html

疑似CPU或者内存故障导致进程崩溃

2017-11-11 09:39 by lixiong, 阅读(1776) 阅读, 推荐(1) 推荐, 收藏, 编辑
摘要:我们有一个服务跑在微软云的所有宿主机上。最近发现某一台机器上该服务进程持续崩溃。崩溃原因是访问了一个无效指针,对应的代码如下 serviceListIniBuffer.AppendF("ServerList=%s\r\n", m_newServiceList.config->GetStringPar 阅读全文

Web服务的性能,和BCrypt性能问题的解决方法

2011-12-25 01:51 by lixiong, 阅读(4202) 阅读, 推荐(0) 推荐, 收藏, 编辑
摘要:在昨天的研究中,发现BCrypt最大的隐患在于性能。BCrypt的安全性是通过牺牲性能来获取的。BCrypt比传统hash+salt要安全一万倍,但是代价是使用BCrypt做认证对比密码和密文时候,性能也比hash+salt要慢一万倍。 所以,我得出一个结论。如果使用传统hash+salt需要N台认证服务器的话,那用BCrypt就需要添加10000*N台服务器才能达到同样的性能。比如一个邮件系统使用了2台服务器来专门作认证,那使用BCrypt的话就需要再购买2万台。当然,小的应用,如果使用一台服务器1%的性能就可以做完认证的话,使用BCrypt只需要100台服务器。 这个听起来比较吓人... 阅读全文

md5/sha1+salt和Bcrypt

2011-12-24 04:04 by lixiong, 阅读(29019) 阅读, 推荐(11) 推荐, 收藏, 编辑
摘要:今天在weibo.com上看到一则消息说, 用md5/sha1+salt的方法保存密码是不安全的. 文章中用连续9个Bcrypt加感叹号来强调, 保存密码一定要用Bcrypt. 这个消息非常应景, 因为csdn.net两天前把数据库弄丢了, 里面的密码是明文保存的. 我对密码和安全没有研究, 但是在我粗浅的记忆中, hash+salt是非常主流的方法. 如果说这样也不靠谱, 那我正好借这个机会复习一下. 我把密码安全分为两个等级, 黄色和红色. 当数据库丢失后, 能算出一个可以用来登陆的密码, 这个密码不一定是原文, 但是保证可以通过验证, 这个算达到黄色. 如果还能算出原文, 这个就达到.. 阅读全文

从Win8回顾微软平台的各种技术

2011-12-03 14:15 by lixiong, 阅读(13421) 阅读, 推荐(39) 推荐, 收藏, 编辑
摘要:我安装好Win8 CTP后做的第一件事情就是用调试器研究Win8各个组件的协作关系. 从我半天的研究结果看来, Win8真是一个让我爱不释手的产品. Win8里面涉及到的很多技术正好也是我的兴趣所在. 这篇文章简单回顾一下这些技术的变迁, 优缺点, 和对Win8的影响. 注意, 下面提到的对Win8的分析, 是基于公开的Win8 CTP来做的. 相信Win8面世的时候, 这些技术和细节, 都会发生重大改变. 所以这篇文章不具备实践上的指导价值. COM -Component Object Model 通用组件模型 COM是上个世纪中期设计出来的伟大产品. COM旨在解决软件复用的问题. ... 阅读全文

为什么EXE不能超过4GB

2010-07-13 10:32 by lixiong, 阅读(10218) 阅读, 推荐(5) 推荐, 收藏, 编辑
摘要:为什么EXE不能超过4GB前几天看到大家在讨论EXE装载的问题,很新奇。有的说PE装载受到进程空间的限制,有的说PE一定是整体装入,有的用ZIP自解压包来举例子。我当时大概想了一下,觉得PE不一定是要整体装入的。PE文件包含一个PE header,里面定义了各个段,比如代码,资源等等的偏移地址,装载的时候应该不会超出这个PE header的定义。也就是说,如果PE header里面定义了最远的段是... 阅读全文

其实.NET的确慢, 微软推的这一套的确不适合很多地方

2010-07-08 00:25 by lixiong, 阅读(1661) 阅读, 推荐(0) 推荐, 收藏, 编辑
摘要:微软的bing/msn等web平台系统都不是用c#的, 自己好像用c/c++重新搞了一套C#的速度也的确不能和C++什么的比好像对C#和CLR的性能提升在很久以前还讨论过, 后来放了一个beta版本的compiler SDK出来, 就不是重点方向了现在的重点方向是Azure不过我觉得这没什么值得义愤填膺的, 类似的话题以前VB5/C++5.0的时候就有了, 或许还能找到当时的VB5/VC5/BC/... 阅读全文

微软平台UI自动化(UIA)经验集

2010-05-20 20:30 by lixiong, 阅读(5560) 阅读, 推荐(4) 推荐, 收藏, 编辑
摘要:根据我UIA自动化测试的经验, 总结了下面代码集. 在这个代码集中, 包含了:1. 一个WPF的窗体程序2. 一个WinForm的窗体, 这个窗体作为Model Dialog被WPF主程序打开3. 针对这个WPF和WinForm的测试代码例子4. 针对Win7 Calc.exe的测试代码例子5. 一个简单的TestEngine这个代码集的作用是:1. 演示UIA中基本的概念, 比如Automati... 阅读全文

今天在InfoQ看到一个google关于test的演讲, 非常精彩

2010-04-10 21:54 by lixiong, 阅读(4182) 阅读, 推荐(6) 推荐, 收藏, 编辑
摘要:今天在InfoQ看到一个google关于test的演讲, 非常精彩http://www.infoq.com/cn/presentations/duannian-agile-test演讲人段念, 似乎也叫做关河, 网上的介绍在:http://www.qconbeijing.com/Speaker.aspx?Id=33个人网站在http://www.cnblogs.com/guanhe/没想到国内社区... 阅读全文

来来来, 我也来发发我大二时候的作品

2010-03-17 00:14 by lixiong, 阅读(3085) 阅读, 推荐(3) 推荐, 收藏, 编辑
摘要:今天看到了:12年前的作品──《美绿中国象棋》制作过程及算法简介http://www.cnblogs.com/miloyip/archive/2010/03/16/1687647.html不仅想到了我大二时候的作品, 让大家比较下墙内墙外的差距, 希望大家不要见笑, 再怎么样, 我这个好歹还是开源的.第一个也是棋类游戏, 五子棋. 当时qq上都还没有五子棋, 个别网站上的支... 阅读全文
点击右上角即可分享
微信分享提示