摘要: 在为一个视频相关SDK添加h264编码支持时,Android/iOS平台都进展都很顺利,Windows想着也不不多,先编成静态库后扔Vistual Studio做链接,目标是最终都链接为一个动态库。因为有现成的编译shell脚本,开始尝试用mingw编译静态库,发现Vistual Studio链接时 阅读全文
posted @ 2016-07-01 23:35 LittlePeng 阅读(5221) 评论(2) 推荐(0) 编辑
摘要: 某个产品的Mac客户端计划基于electron实现,因为现有SDK有C API,原理上用NodeJS Addon来封装成JS API就可使用了。但涉及到与Addon多线程交互,翻找资料没能找到到底该怎么做,只好翻看NodeJS实现找到实现思路。 实现思路上,NodeJS V8 引擎是libuv单线程 阅读全文
posted @ 2016-05-26 22:15 LittlePeng 阅读(2645) 评论(0) 推荐(0) 编辑
摘要: 今天看了下云风写的关于 c coroutine博客 (代码), 发现 coroutine 实现原理其实还比较简单,就用户态栈切换,只需要几十行汇编,特别轻量级。 具体实现 1. 创建一个coroutine: 也就是创建一块连续内存,用于存放栈空间,并设置好入口函数所需要的寄存器 makecontex 阅读全文
posted @ 2015-03-11 00:41 LittlePeng 阅读(2073) 评论(2) 推荐(0) 编辑
摘要: 最近有个业务场景存储压力很大,写远远大于读,读也集中在最近写入,想想这不很适合采用leveldb存储么。leveldb的话好像用ssdb比较多,花了两天时间就ssdb简单做下测试,以下总结。 ssdb 是对leveldb存储引擎的redis兼容协议封装,并且实现了主从同步,源码不多易读。对于支持的操 阅读全文
posted @ 2015-01-18 15:30 LittlePeng 阅读(54275) 评论(2) 推荐(2) 编辑
摘要: 声明:微信客户端协议是二进制协议而且加密,难以分析协议具体编码格式,我不做逆向工程。只是简单抓包分析业务的实现流程,在这里记录下来用于参考学习,并不是破解协议。 语音片断 语音片断的发送、接收都是通过长连接分包进行: 发送:语音录制过程中,客户端每2秒发一次,每次2.5K左右 接收:服务器将语音分片 阅读全文
posted @ 2015-01-03 19:31 LittlePeng 阅读(5758) 评论(4) 推荐(0) 编辑
摘要: 声明:微信客户端协议是二进制协议而且加密,难以分析协议具体编码格式,我不做逆向工程。只是简单抓包分析业务的实现流程,在这里记录下来用于参考学习,并不是破解协议。 IM产品的多点登陆逻辑特别复杂,很难做到很好的用户体验,就像新版mac handoff 功能也不少人在喷。 微信最开始并不支持多点登陆,后 阅读全文
posted @ 2015-01-03 18:16 LittlePeng 阅读(12185) 评论(0) 推荐(1) 编辑
摘要: 声明:微信客户端协议是二进制协议而且加密,难以分析协议具体编码格式,我不做逆向工程。只是简单抓包分析业务的实现流程,在这里记录下来用于参考学习,并不是破解协议。 参考: 微信协议简单调研笔记 微信破解研究总结 Sync协议 道听途说,加上上面参考中都是提到微信使用Sync协议。去年项目中因此也尝试参 阅读全文
posted @ 2015-01-03 15:11 LittlePeng 阅读(69275) 评论(10) 推荐(1) 编辑
摘要: 参考: Zookeeper的一致性协议:Zab Chubby&Zookeeper原理及在分布式环境中的应用 Paxos vs. Viewstamped Replication vs. Zab Zab vs. Paxos Zab: High-performance broadcast for prim 阅读全文
posted @ 2015-01-03 01:22 LittlePeng 阅读(3857) 评论(0) 推荐(0) 编辑
摘要: 补习了一下分布式相关知识,嗯,还是有很些不懂地方,阅读不少不错资源,记录一下有时间回头再读。 分布式存储的强一致性实现方式:1. Quorum: W+R>N2. 同步复制: 如PacificA3. 复制状态机:分布式一致性协议Paxos/Raft/Zab等学习分布式系统需要怎样的知识?CSE 55... 阅读全文
posted @ 2014-12-27 22:07 LittlePeng 阅读(1358) 评论(0) 推荐(0) 编辑
摘要: erlang 提供了简单易用的并发编程模型,基本不需要再考虑多线程并发问题。但实际应用中并不是那么的完美,很多地方需要注意,就算标准库也有不少问题。很多在多线程编程中很多很容易解决的事情,在erlang中是那么的蛋疼和无奈。erlang专注于自己擅长领域,本身十分健壮,强大的shell,分布式特... 阅读全文
posted @ 2014-12-27 13:12 LittlePeng 阅读(1192) 评论(0) 推荐(0) 编辑
摘要: 正常情况tcp四层握手关闭连接,rst基本都是异常情况,整理如下: 1. GFW 2. 对方端口未打开,发生在连接建立 如果端口打开,只是sync_backlog满了的话,sync简单被丢弃,表现为超时,而不会rst。 3. close Socket 时recv buffer 不为空 例如,客户端发 阅读全文
posted @ 2014-12-07 16:51 LittlePeng 阅读(24237) 评论(0) 推荐(0) 编辑
摘要: linux TIME_WAIT 相关参数: 注意: - 不像Windows 可以修改注册表修改2MSL 的值,linux 需要修改内核宏定义重新编译,tcp_fin_timeout 不是2MSL 而是Fin-WAIT-2状态超时时间. - tcp_tw_reuse 和 SO_REUSEADDR 是两 阅读全文
posted @ 2014-12-07 13:19 LittlePeng 阅读(87590) 评论(2) 推荐(2) 编辑
摘要: 一般说来抓dump 4种 方式: 1. erlang:halt(“abort”). 2. 在erlang shell下输入CTRL C + “大写的A” 3.等着进程崩溃自己产生dump 4.kill -SIGUSR1 (shell 无法进入时可以使用) 不过4个方式无一不是需要no... 阅读全文
posted @ 2014-12-07 11:35 LittlePeng 阅读(1997) 评论(0) 推荐(0) 编辑
摘要: 系统级别perf top, dstat -tam, vtune 都能很好分析beam 瓶颈,本文主要erlang 级别排查:1. 反编译 确认线上运行代码是否正确,reltools没掌握好,升级偶尔出现问题decompile(Mod) -> {ok,{_,[{abstract_code,{_,... 阅读全文
posted @ 2014-12-07 11:26 LittlePeng 阅读(4901) 评论(0) 推荐(2) 编辑
摘要: 现网服务,每次更新一个服务时,另外一个集群所有node 都跟着同时重启一遍,这么调皮,这是闹哪样啊。。 看系统日志:/var/log/messages Oct 30 15:19:41 localhost kernel: beam.smp[21880]: segfault at 7fa300... 阅读全文
posted @ 2014-12-07 11:06 LittlePeng 阅读(1199) 评论(1) 推荐(1) 编辑
摘要: 上篇Erlang C1500K长连接推送服务-性能提到:150w连接,使用了23GB内存,每个连接占用15KB,约一半是内核使用。大概分析一下:1. Erlang 节点 12GB,内部因为有内存池碎片问题,实际使用9GB,也就是实际每个进程+Port占用越6K,因为采用hibernate策略,已经... 阅读全文
posted @ 2014-11-30 01:19 LittlePeng 阅读(1385) 评论(2) 推荐(0) 编辑
摘要: Whatsapp已经使用Erlang在生产环境跑到96GB内存单机 3M长连接,参加:WhatsApp的Erlang世界。毕竟业务级别能达到Whatsapp那样极少,现在只有千万级,单机太多挂一台影响太大,再者就是没有多线接入,每个机房都得扔那么几台机器吧,所以1M就能满足要求。Erlang 作为长... 阅读全文
posted @ 2014-11-30 00:05 LittlePeng 阅读(3998) 评论(2) 推荐(0) 编辑
摘要: 需求是在缓存最近一周内用户所有消息列表,考虑用Redis 存储;为每个存储一个独立Sorted Set,value 为消息体,Score 为MessageId,用以实现增量消息同步。 问题就来了:Sorted Set 怎么清理? -设计内存容量只允许放一周内最新的,太久了缓存意义不大,太... 阅读全文
posted @ 2014-10-25 15:23 LittlePeng 阅读(8860) 评论(0) 推荐(0) 编辑
摘要: erlang 默认启动参数更多的是针对电信平台实时特性,简单调整参数能很大程度降低CPU消耗,提高处理能力。1. 关闭spin_wait 设置参数:+sbwt none我上一篇文章提到:erlang 调度器CPU利用率低排查,关闭spin_wait 可能增加了调度器需要唤醒延时。关闭后CPU 基本... 阅读全文
posted @ 2014-10-18 01:17 LittlePeng 阅读(2794) 评论(0) 推荐(0) 编辑
摘要: 前些天发现:http://hellojava.info/ 这个站点,关于java问题排查分析总结线上故障总结其实是最有价值的,好的总结就是一个系统演进历史,是团队难得的积累沉淀。花了不少时间看了下,顺手整理了笔记:1. Hashmap 并发情况下未加锁导致OOM 嗯,死循环很常见,OOM也会有,... 阅读全文
posted @ 2014-10-18 00:54 LittlePeng 阅读(1361) 评论(0) 推荐(0) 编辑
摘要: -问题起因 近期线上一组服务中,个别节点服务器CPU使用率很低,只有其他1/4。排除业务不均,曾怀疑是系统top统计错误,从Erlang调度器的利用率调查找到通过erlang:statistics(scheduler_wall_time) 查看服务器CPU低的机器调度器实际的CPU利用率很高接近1... 阅读全文
posted @ 2014-09-18 00:21 LittlePeng 阅读(12617) 评论(4) 推荐(0) 编辑
摘要: 2G、3G环境,那就必须root进去tcpdump 方式抓。准备:一、root CF-auto-root:http://autoroot.chainfire.eu/ 需要清理全部数据,注意备份 不用怕root 后的不安全,root权限由superU管理授权。 root 后推荐: 绿色保护、fqro... 阅读全文
posted @ 2014-09-14 15:08 LittlePeng 阅读(20483) 评论(0) 推荐(0) 编辑
摘要: 先推荐一篇:mnesia源码分析(yufeng)- linear hash ETS/DETS/mnesia 都使用了linear hash算法http://en.wikipedia.org/wiki/Linear_hashingredis dict 的实现类似于linear hash,渐进式reha... 阅读全文
posted @ 2014-09-01 23:22 LittlePeng 阅读(4332) 评论(0) 推荐(0) 编辑
摘要: rick 的两个ppt整理下载:2012 2013 ,使用半年erlang后,重新看这两个ppt才发现更多值的学习的地方,从ppt中整理如下:- Prefer os:timestamp to erlang:now 应该禁止使用erlang:now(),稍微用得多,整个node的%si 飙满,且整体性... 阅读全文
posted @ 2014-08-29 23:52 LittlePeng 阅读(4259) 评论(0) 推荐(0) 编辑
摘要: 新服务上线后观察到,CPU在10 ~ 70%间波动严重,但从每秒业务计数器看业务处理速度很平均。 接下来是排查步骤: 1. dstat -tam 大概每10s一个周期,网络流量开始变得很小,随后突然增大,CPU也激增。 网络流量变化和从性能计数器结果上并不符合,服务相关业务较为复杂,... 阅读全文
posted @ 2014-07-27 23:36 LittlePeng 阅读(3627) 评论(2) 推荐(1) 编辑
摘要: infoq 上微信后台存储架构视频很是值得认真一听,大概内容摘要如下:主要内容:同城分布式强一致,园区级容灾KV存储系统- sync 序列号发生器 移动互联网场景下,频繁掉线重连,使用 sync 消息协议是非常理想的。相比于推送协议,更加可靠、实现简洁(不需要考虑离线消息)。从陌陌分享看,也使用s... 阅读全文
posted @ 2014-07-27 15:03 LittlePeng 阅读(2950) 评论(0) 推荐(0) 编辑
摘要: 算起来接触erlang 快四个月来,从零开始看书写erlang代码、修改RabbitMQ、业务开发、系统调优,总算是有点入门了。 最难受的是边学边修改RabbitMQ,难受只是暂时的,憋过去就海阔天空,最后提交修改2000+行代码。 说到坑都是自己技术不过关造成,erlang 设计与一般语言很大不同 阅读全文
posted @ 2014-07-06 00:25 LittlePeng 阅读(2282) 评论(2) 推荐(0) 编辑
摘要: 问题由来 前些天对系统做了一个优化,将原来从queue 轮询刷出数据后每条消息一个 spawn 进程单独处理,修改为批量刷出。一条一条刷轮询刷 queue 存在问题:刷queue 进程太多时,占用CPU,刷queue 少时容易受网络延时影响。修改后,queue 中数据越多,batch 数越大,提高... 阅读全文
posted @ 2014-07-05 22:45 LittlePeng 阅读(969) 评论(2) 推荐(1) 编辑
摘要: 今天开始学习Erlang,参照《programing erlang》书例子,测试erlang创建进程性能 创建N个进程 都wait,然后挨个发送die关闭进程,代码如下: 测试场景:200w进程、MacBook Pro 2013(I5/16G) 测试结果: processes:max(2000000 阅读全文
posted @ 2014-03-10 23:58 LittlePeng 阅读(678) 评论(0) 推荐(0) 编辑
摘要: 环境:Clients:N台linux, 使用“ab -k -c 20000...” 并发2w 请求haproxyHaproxy Server: R610 2*8核 2.4GReal Server: IIS6 (50字节 html静态文件)使用一台客户端向haproxy发起20000并发请求,如下:1... 阅读全文
posted @ 2013-07-24 22:45 LittlePeng 阅读(4919) 评论(1) 推荐(0) 编辑