文 | 闲欢

来源:Python 技术「ID: pythonall」

0

下午和老婆手牵手心连心去“好时光”照相馆拍照片,记录我们的美好时刻。

拍完一组照片,在等待摄影师修图的时候,老婆站在我身后给我捶背,说我开车辛苦了,给我揉揉肩捶捶背。这待遇真是羡煞了路人甲,作为男人,这种满足感也是无与伦比的。

这时候,作为一个男人,咱也不甘示弱:掏出手机,打开微信,点击“转账”,输入520,转账留言还不忘附一句“么么哒”。

一气呵成之后,我提醒老婆赶紧看微信,老婆打开微信,刷了几下,啥都没看到,跑来问我说,看什么呀?

我提高嗓门说:给你发了个大包,你赶紧领了,过时不候哈!

哪里有大包嘛?你看看,啥也没收到呀!

听到这句话,我愣了一下,随即冒了一丝冷汗:没收到?难道我发错人了?完了完了,赶紧检查一下,要是发到另一个女孩的微信上就跳进黄河也洗不清了!

我赶忙打开手机,确认了三遍,没发错,这才松了一口气。我说你看,我已经发过去了,你没接收到,你是不是信号不好,你连 WiFi 看看!

老婆连了 WiFi,也还是没看到。我打开手机微博,刷新内容都没问题,心理一百个为什么。。。

这时候修照片的老板娘(据说像某位明星)跟我们说,照片修好了,让我们看看。我们看了之后说很满意,把我严肃的表情修成了微笑,很棒!

接着老板娘让我加她微信,把底片发给我。我微信扫一扫二维码,添加了微信。可是老板娘等了半天,也没有收到好友请求。我又添加了一次,还是一样的结果。我不信邪,切换到了另一张联通 5G 卡,又添加了一下,结果同样没收到。

我就郁闷了,这都 4G 加 5G ,一共 9G 了,怎么还是收不到请求呢?

结果让老婆添加,一次性就成功了。

当时贼郁闷,炫耀的红包老婆没有收到,明星老板娘的微信也没加上,今天这人品是咋啦?

0

1

草草收场之后,我们离开了影楼,老婆路上还念叨着红包,看着她可怜兮兮的样子,我心疼啊,于是我又拿起手机转了一个 520 过去,为了区分,我特意在转账留言后面加了一个企鹅发爱心的表情。

这次发过去她就看到了,以迅雷不及掩耳之势点了红包。令人意想不到的是,她收了红包之后,马上又冒出来一个,也就是之前没收到的那个,这时候也出现了。毫无意外,以抢红包的手速马上又点了一次,欣喜若狂地对我说:谢谢老公,两个红包都收到了!

这杀千刀的微信,害人啊!微信余额总共才 1000 出头,这一下子掏空了,接下来日子怎么过啊!大家可以理解我此时内心的 OS 吗?

0

2

晚上,回到家刷微博,无意间发现“微信bug”上了热搜,看到微信官方的微博,才知道自己被微信坑了:

微信团队表示,今天14点左右,部分微信用户遇到了消息收取延迟情况,原因是系统抖动,目前已经修复完成。

微信团队还宽慰大家:你家网络应该没啥问题。

我内心想:我家网络是没问题,我家家庭和睦关系差点遭殃!

0

3

看了这个解释,作为技术人员,我的第一反应当然是去了解一下什么是“系统抖动”,我去网上搜索相关资料,解释是这样的:

如果低优先级进程所分配的帧数低于计算机体系结构所需的最小数量,那么必须暂停该进程执行。然后,应调出它的所有剩余页面,以便释放所有分配的帧。这个规定引入了中级 CPU 调度的换进换出层。

事实上,需要研究一下没有“足够”帧的进程。如果进程没有需要支持活动使用页面的帧数,那么它会很快产生缺页错误。此时,必须置换某个页面。然而,由于它的所有页面都在使用中,所以必须立即置换需要再次使用的页面。因此,它会再次快速产生缺页错误,再一次置换必须立即返回的页面,如此快速进行。

这种高度的页面调度活动称为抖动。如果一个进程的调页时间多于它的执行时间,那么这个进程就在抖动。

系统抖动的原因是什么呢?

操作系统监视 CPU 利用率。如果 CPU 利用率太低,那么通过向系统引入新的进程来增加多道程度。采用全局置换算法会置换任何页面,而不管这些页面属于哪个进程。

现在假设进程在执行中进入一个新阶段,并且需要更多的帧。它开始出现缺页错误,并从其他进程那里获取帧。然而,这些进程也需要这些页面,因此它们也会出现缺页错误,并且从其他进程中获取帧。这些缺页错误进程必须使用调页设备以将页面换进和换出。当它们为调页设备排队时,就绪队列清空。随着进程等待调页设备,CPU 利用率会降低。

CPU 调度程序看到 CPU 利用率的降低,进而会增加多道程度。新进程试图从其他运行进程中获取帧来启动,从而导致更多的缺页错误和更长的调页设备队列。因此,CPU 利用率进一步下降,并且 CPU 调度程序试图再次增加多道程度。这样就出现了抖动,系统吞吐量陡降,缺页错误率显著增加。结果,有效内存访问时间增加,没有工作可以完成,因为进程总在忙于调页。

在本次微信事件中,我们通俗的理解为:

所谓系统抖动(thrashing),是一个计算机专业名词,指的是虚拟内存方案中的一种现象,通常是因为内存或其他资源耗尽或有限,导致无法完成所要执行的操作。

当上述情况发生时,程序就会通过操作系统发出请求,操作系统则试图从其他程序中调用所需资源,导致新的请求不能得到满足。

系统抖动发生时,系统时间会消耗在低速的I/O上,更多地进行页面交换而不是指令执行,进而大大降低系统效率。

用大白话说就是:微信消息收发系统的资源不够用了。

今天虽然钱包空了,感觉损失了几个亿,并且差点好事变坏事,但是经历了一次微信的重大事件,而且学到了点新知识,也算是不小的收获了!

PS:公号内回复「Python」即可进入Python 新手学习交流群,一起 100 天计划!

老规矩,兄弟们还记得么,右下角的 “在看” 点一下,如果感觉文章内容不错的话,记得分享朋友圈让更多的人知道!

神秘礼包获取方式】

识别文末二维码,回复:1024

我擦!发红包遇到了微信抖动!相关推荐

  1. 【微信公众号发红包转账】微信公众号上手机网页接收请求,通过公众号给用户发红包 开发流程...

    有了微信支付 的开发做铺垫,相关的微信其他业务处理起来逻辑就能清晰很多. 准备好这两个架包 ------------------------------------------------------ ...

  2. python发红包程序解析-微信红包python实现

    昨天去面试一个公司的时候,和对方技术负责人聊到一半,突然叫我现场写 一个微信红包出来,当时我是懵逼的(之前叫我手写一个排序出来,我只写出了一个冒泡出来),但是想了几秒钟,觉得应该挺简单的吧,发红包不就 ...

  3. python 发红包import random用redenv,Python微信发红包编码案例 微信发红包的架构模式 - push博客...

    Python手机微信红包优化算法案例 #!/usr/bin/env python # coding: utf-8 import random # m : 红包个数 # n : 红包人数 # packe ...

  4. python模拟微信发红包算法_微信红包的随机算法是怎样实现的?

    有人问过微信的人,大致是这样: 先上代码: public static double getRandomMoney(RedPackage _redPackage) { // remainSize 剩余 ...

  5. tp5 MySQL发红包功能_ThinkPHP5微信现金红包开发

    //---- 以下是微信现金红包的区域start ----// /** * 微信发放现金红包核心函数,调用本函数就直接发放红包了. * @param $url 现金红包的请求地址 * @param $ ...

  6. python微信发红包看照片_微信发原图会泄露位置信息?用Python教你通过图片获取用户信息!...

    前言 有媒体曝出,微信发原图或存在泄露位置信息的风险. 对此,腾讯微信团队微博12月1日发布声明称,朋友圈发送的照片都经过系统自动压缩,不带位置等信息,实在担心的话,可以P完图再发,如下图: 微信团队 ...

  7. 微信发红包、QQ登录、搜索框、水杯、聊天窗口、两台电梯、微信/淘宝支付、笔、 抖音发布短视频等功能测试用例

    文章目录 一.微信发红包测试用例 三.搜索框测试用例 四.水杯测试用例 五.聊天窗口测试用例 六.两台电梯测试用例 七.(微信/淘宝)支付功能的测试用例 八.笔测试用例 九.抖音发布短视频功能测试用例 ...

  8. 搜索框、微信发红包、水杯、QQ登录、聊天窗口、两台电梯的测试用例

    一.搜索框的测试用例 1.功能测试 1. 搜索框输入内容为空,验证功能是否正确2. 搜索框输入内容为空格,验证功能是否正确3. 边界值验证:最大输入的字符串长度,最小输入的字符串长度4. 超长字符串的 ...

  9. 微信小程序红包开发 小程序发红包 开发过程中遇到的坑 微信小程序红包接口的...

    最近公司在开发一个小程序红包系统,客户抢到红包需要提现.也就是通过小程序来给用户发红包. 小程序如何来发红包呢?于是我想到两个方法. 之前公众号开发一直用了的.一个是红包接口,一个是企业支付接口.一开 ...

最新文章

  1. python 启动django时报错MySQLdb._exceptions.OperationalError: (2059, <NULL>)和django.db.utils.OperationalEr
  2. 方法区如何判断是否需要回收
  3. Laravel 不同环境加载不同的.env文件
  4. MySql学习之varchar类型
  5. 489个学位点被撤销,2018撤销和增列学位授权点名单公布
  6. mysql如何创建用户代码_MySQL创建用户与受权方法_mysql
  7. 阿里组织架构的”大中台+小前台“
  8. iOS各个版本的新特性介绍
  9. A Better Finder Attributes 7 Mac版(文件批量重命名)
  10. 从武则天的故事看职场生涯规划的一个最重要方面
  11. 华为设备初始用户名/密码
  12. 只需1分钟,这个网站用AI分离歌曲的人声、伴奏和乐器声
  13. Android Activity防劫持方案
  14. Number.EPSILON
  15. H5页面手机端禁止缩放的正确方式
  16. 基于QuartusII的verilog数字时钟设计
  17. 恢复Outlook 2010/2007已被删除邮件的方法
  18. oppo k10 Pro和iqooneo6哪个性能更强 哪个值得买呢
  19. python androidhelper 播放 音频_基于外置UAC音频设备做的一款录音Android Demo
  20. 化妆品不合肤质惹来老年斑

热门文章

  1. ZWAVE Alarm Report Command
  2. 摩托罗拉,不懂时尚终将没落
  3. Throws和Throw的区别?
  4. 3.3.14 电压-电流转换电路
  5. simulink的应用实验MATLAB,实验1 运用MATLABSimulink进行系统仿真实验(指导书)
  6. 土力学地基基础课程题库及参考答案
  7. 我们中心的所有成员!
  8. 传感器技术—霍尔传感器(学习笔记九)
  9. 芯片制程3nm5nm7nm
  10. java junit 怎么写_java-如何确定代码是否在JUnit测试内运行?