博客园 - LittlePeng
uuid:24b78886-0ed1-41c2-8670-e3f31dcf42c4;id=43674
2023-08-08T16:42:45Z
LittlePeng
https://www.cnblogs.com/lulu/
feed.cnblogs.com
https://www.cnblogs.com/lulu/p/5634550.html
ffmpeg+x264 Windows MSVC 静态编译 - LittlePeng
在为一个视频相关SDK添加h264编码支持时,Android/iOS平台都进展都很顺利,Windows想着也不不多,先编成静态库后扔Vistual Studio做链接,目标是最终都链接为一个动态库。因为有现成的编译shell脚本,开始尝试用mingw编译静态库,发现Vistual Studio链接时
2016-07-01T15:35:00Z
2016-07-01T15:35:00Z
LittlePeng
https://www.cnblogs.com/lulu/
【摘要】在为一个视频相关SDK添加h264编码支持时,Android/iOS平台都进展都很顺利,Windows想着也不不多,先编成静态库后扔Vistual Studio做链接,目标是最终都链接为一个动态库。因为有现成的编译shell脚本,开始尝试用mingw编译静态库,发现Vistual Studio链接时 <a href="https://www.cnblogs.com/lulu/p/5634550.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lulu/p/5532883.html
NodeJS Addon 多线程通信 - LittlePeng
某个产品的Mac客户端计划基于electron实现,因为现有SDK有C API,原理上用NodeJS Addon来封装成JS API就可使用了。但涉及到与Addon多线程交互,翻找资料没能找到到底该怎么做,只好翻看NodeJS实现找到实现思路。 实现思路上,NodeJS V8 引擎是libuv单线程
2016-05-26T14:15:00Z
2016-05-26T14:15:00Z
LittlePeng
https://www.cnblogs.com/lulu/
【摘要】某个产品的Mac客户端计划基于electron实现,因为现有SDK有C API,原理上用NodeJS Addon来封装成JS API就可使用了。但涉及到与Addon多线程交互,翻找资料没能找到到底该怎么做,只好翻看NodeJS实现找到实现思路。 实现思路上,NodeJS V8 引擎是libuv单线程 <a href="https://www.cnblogs.com/lulu/p/5532883.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lulu/p/coroutine.html
c coroutine - LittlePeng
今天看了下云风写的关于 c coroutine博客 (代码), 发现 coroutine 实现原理其实还比较简单,就用户态栈切换,只需要几十行汇编,特别轻量级。 具体实现 1. 创建一个coroutine: 也就是创建一块连续内存,用于存放栈空间,并设置好入口函数所需要的寄存器 makecontex
2015-03-10T16:41:00Z
2015-03-10T16:41:00Z
LittlePeng
https://www.cnblogs.com/lulu/
【摘要】今天看了下云风写的关于 c coroutine博客 (代码), 发现 coroutine 实现原理其实还比较简单,就用户态栈切换,只需要几十行汇编,特别轻量级。 具体实现 1. 创建一个coroutine: 也就是创建一块连续内存,用于存放栈空间,并设置好入口函数所需要的寄存器 makecontex <a href="https://www.cnblogs.com/lulu/p/coroutine.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lulu/p/4231810.html
leveldb(ssdb)性能、使用场景评估 - LittlePeng
最近有个业务场景存储压力很大,写远远大于读,读也集中在最近写入,想想这不很适合采用leveldb存储么。leveldb的话好像用ssdb比较多,花了两天时间就ssdb简单做下测试,以下总结。 ssdb 是对leveldb存储引擎的redis兼容协议封装,并且实现了主从同步,源码不多易读。对于支持的操
2015-01-18T07:30:00Z
2015-01-18T07:30:00Z
LittlePeng
https://www.cnblogs.com/lulu/
【摘要】最近有个业务场景存储压力很大,写远远大于读,读也集中在最近写入,想想这不很适合采用leveldb存储么。leveldb的话好像用ssdb比较多,花了两天时间就ssdb简单做下测试,以下总结。 ssdb 是对leveldb存储引擎的redis兼容协议封装,并且实现了主从同步,源码不多易读。对于支持的操 <a href="https://www.cnblogs.com/lulu/p/4231810.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lulu/p/4199858.html
[微信协议分析] 多媒体 - LittlePeng
声明:微信客户端协议是二进制协议而且加密,难以分析协议具体编码格式,我不做逆向工程。只是简单抓包分析业务的实现流程,在这里记录下来用于参考学习,并不是破解协议。 语音片断 语音片断的发送、接收都是通过长连接分包进行: 发送:语音录制过程中,客户端每2秒发一次,每次2.5K左右 接收:服务器将语音分片
2015-01-03T11:31:00Z
2015-01-03T11:31:00Z
LittlePeng
https://www.cnblogs.com/lulu/
【摘要】声明:微信客户端协议是二进制协议而且加密,难以分析协议具体编码格式,我不做逆向工程。只是简单抓包分析业务的实现流程,在这里记录下来用于参考学习,并不是破解协议。 语音片断 语音片断的发送、接收都是通过长连接分包进行: 发送:语音录制过程中,客户端每2秒发一次,每次2.5K左右 接收:服务器将语音分片 <a href="https://www.cnblogs.com/lulu/p/4199858.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lulu/p/4199770.html
[微信协议分析] 多点登陆 - LittlePeng
声明:微信客户端协议是二进制协议而且加密,难以分析协议具体编码格式,我不做逆向工程。只是简单抓包分析业务的实现流程,在这里记录下来用于参考学习,并不是破解协议。 IM产品的多点登陆逻辑特别复杂,很难做到很好的用户体验,就像新版mac handoff 功能也不少人在喷。 微信最开始并不支持多点登陆,后
2015-01-03T10:16:00Z
2015-01-03T10:16:00Z
LittlePeng
https://www.cnblogs.com/lulu/
【摘要】声明:微信客户端协议是二进制协议而且加密,难以分析协议具体编码格式,我不做逆向工程。只是简单抓包分析业务的实现流程,在这里记录下来用于参考学习,并不是破解协议。 IM产品的多点登陆逻辑特别复杂,很难做到很好的用户体验,就像新版mac handoff 功能也不少人在喷。 微信最开始并不支持多点登陆,后 <a href="https://www.cnblogs.com/lulu/p/4199770.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lulu/p/4199544.html
[微信协议分析] 文本消息 - LittlePeng
声明:微信客户端协议是二进制协议而且加密,难以分析协议具体编码格式,我不做逆向工程。只是简单抓包分析业务的实现流程,在这里记录下来用于参考学习,并不是破解协议。 参考: 微信协议简单调研笔记 微信破解研究总结 Sync协议 道听途说,加上上面参考中都是提到微信使用Sync协议。去年项目中因此也尝试参
2015-01-03T07:11:00Z
2015-01-03T07:11:00Z
LittlePeng
https://www.cnblogs.com/lulu/
【摘要】声明:微信客户端协议是二进制协议而且加密,难以分析协议具体编码格式,我不做逆向工程。只是简单抓包分析业务的实现流程,在这里记录下来用于参考学习,并不是破解协议。 参考: 微信协议简单调研笔记 微信破解研究总结 Sync协议 道听途说,加上上面参考中都是提到微信使用Sync协议。去年项目中因此也尝试参 <a href="https://www.cnblogs.com/lulu/p/4199544.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lulu/p/4199056.html
paxos(chubby) vs zab(Zookeeper) - LittlePeng
参考: Zookeeper的一致性协议:Zab Chubby&Zookeeper原理及在分布式环境中的应用 Paxos vs. Viewstamped Replication vs. Zab Zab vs. Paxos Zab: High-performance broadcast for prim
2015-01-02T17:22:00Z
2015-01-02T17:22:00Z
LittlePeng
https://www.cnblogs.com/lulu/
【摘要】参考: Zookeeper的一致性协议:Zab Chubby&Zookeeper原理及在分布式环境中的应用 Paxos vs. Viewstamped Replication vs. Zab Zab vs. Paxos Zab: High-performance broadcast for prim <a href="https://www.cnblogs.com/lulu/p/4199056.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lulu/p/4189254.html
分布式一致性算法 - LittlePeng
补习了一下分布式相关知识,嗯,还是有很些不懂地方,阅读不少不错资源,记录一下有时间回头再读。 分布式存储的强一致性实现方式:1. Quorum: W+R>N2. 同步复制: 如PacificA3. 复制状态机:分布式一致性协议Paxos/Raft/Zab等学习分布式系统需要怎样的知识?CSE 55...
2014-12-27T14:07:00Z
2014-12-27T14:07:00Z
LittlePeng
https://www.cnblogs.com/lulu/
【摘要】补习了一下分布式相关知识,嗯,还是有很些不懂地方,阅读不少不错资源,记录一下有时间回头再读。 分布式存储的强一致性实现方式:1. Quorum: W+R>N2. 同步复制: 如PacificA3. 复制状态机:分布式一致性协议Paxos/Raft/Zab等学习分布式系统需要怎样的知识?CSE 55... <a href="https://www.cnblogs.com/lulu/p/4189254.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lulu/p/4188255.html
erlang 健壮性 - LittlePeng
erlang 提供了简单易用的并发编程模型,基本不需要再考虑多线程并发问题。但实际应用中并不是那么的完美,很多地方需要注意,就算标准库也有不少问题。很多在多线程编程中很多很容易解决的事情,在erlang中是那么的蛋疼和无奈。erlang专注于自己擅长领域,本身十分健壮,强大的shell,分布式特...
2014-12-27T05:12:00Z
2014-12-27T05:12:00Z
LittlePeng
https://www.cnblogs.com/lulu/
【摘要】erlang 提供了简单易用的并发编程模型,基本不需要再考虑多线程并发问题。但实际应用中并不是那么的完美,很多地方需要注意,就算标准库也有不少问题。很多在多线程编程中很多很容易解决的事情,在erlang中是那么的蛋疼和无奈。erlang专注于自己擅长领域,本身十分健壮,强大的shell,分布式特... <a href="https://www.cnblogs.com/lulu/p/4188255.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lulu/p/4149562.html
tcp 出现rst情况整理 - LittlePeng
正常情况tcp四层握手关闭连接,rst基本都是异常情况,整理如下: 1. GFW 2. 对方端口未打开,发生在连接建立 如果端口打开,只是sync_backlog满了的话,sync简单被丢弃,表现为超时,而不会rst。 3. close Socket 时recv buffer 不为空 例如,客户端发
2014-12-07T08:51:00Z
2014-12-07T08:51:00Z
LittlePeng
https://www.cnblogs.com/lulu/
【摘要】正常情况tcp四层握手关闭连接,rst基本都是异常情况,整理如下: 1. GFW 2. 对方端口未打开,发生在连接建立 如果端口打开,只是sync_backlog满了的话,sync简单被丢弃,表现为超时,而不会rst。 3. close Socket 时recv buffer 不为空 例如,客户端发 <a href="https://www.cnblogs.com/lulu/p/4149562.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lulu/p/4149312.html
tcp_tw_reuse、tcp_tw_recycle 使用场景及注意事项 - LittlePeng
linux TIME_WAIT 相关参数: 注意: - 不像Windows 可以修改注册表修改2MSL 的值,linux 需要修改内核宏定义重新编译,tcp_fin_timeout 不是2MSL 而是Fin-WAIT-2状态超时时间. - tcp_tw_reuse 和 SO_REUSEADDR 是两
2014-12-07T05:19:00Z
2014-12-07T05:19:00Z
LittlePeng
https://www.cnblogs.com/lulu/
【摘要】linux TIME_WAIT 相关参数: 注意: - 不像Windows 可以修改注册表修改2MSL 的值,linux 需要修改内核宏定义重新编译,tcp_fin_timeout 不是2MSL 而是Fin-WAIT-2状态超时时间. - tcp_tw_reuse 和 SO_REUSEADDR 是两 <a href="https://www.cnblogs.com/lulu/p/4149312.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lulu/p/4149217.html
erlang 在线生成crashdump - LittlePeng
一般说来抓dump 4种 方式: 1. erlang:halt(“abort”). 2. 在erlang shell下输入CTRL C + “大写的A” 3.等着进程崩溃自己产生dump 4.kill -SIGUSR1 (shell 无法进入时可以使用) 不过4个方式无一不是需要no...
2014-12-07T03:35:00Z
2014-12-07T03:35:00Z
LittlePeng
https://www.cnblogs.com/lulu/
【摘要】一般说来抓dump 4种 方式: 1. erlang:halt(“abort”). 2. 在erlang shell下输入CTRL C + “大写的A” 3.等着进程崩溃自己产生dump 4.kill -SIGUSR1 (shell 无法进入时可以使用) 不过4个方式无一不是需要no... <a href="https://www.cnblogs.com/lulu/p/4149217.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lulu/p/4149204.html
erlang 故障排查工具 - LittlePeng
系统级别perf top, dstat -tam, vtune 都能很好分析beam 瓶颈,本文主要erlang 级别排查:1. 反编译 确认线上运行代码是否正确,reltools没掌握好,升级偶尔出现问题decompile(Mod) -> {ok,{_,[{abstract_code,{_,...
2014-12-07T03:26:00Z
2014-12-07T03:26:00Z
LittlePeng
https://www.cnblogs.com/lulu/
【摘要】系统级别perf top, dstat -tam, vtune 都能很好分析beam 瓶颈,本文主要erlang 级别排查:1. 反编译 确认线上运行代码是否正确,reltools没掌握好,升级偶尔出现问题decompile(Mod) -> {ok,{_,[{abstract_code,{_,... <a href="https://www.cnblogs.com/lulu/p/4149204.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lulu/p/4149188.html
erlang 虚机crash - LittlePeng
现网服务,每次更新一个服务时,另外一个集群所有node 都跟着同时重启一遍,这么调皮,这是闹哪样啊。。 看系统日志:/var/log/messages Oct 30 15:19:41 localhost kernel: beam.smp[21880]: segfault at 7fa300...
2014-12-07T03:06:00Z
2014-12-07T03:06:00Z
LittlePeng
https://www.cnblogs.com/lulu/
【摘要】现网服务,每次更新一个服务时,另外一个集群所有node 都跟着同时重启一遍,这么调皮,这是闹哪样啊。。 看系统日志:/var/log/messages Oct 30 15:19:41 localhost kernel: beam.smp[21880]: segfault at 7fa300... <a href="https://www.cnblogs.com/lulu/p/4149188.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lulu/p/4132374.html
Erlang C1500K长连接推送服务-内存 - LittlePeng
上篇Erlang C1500K长连接推送服务-性能提到:150w连接,使用了23GB内存,每个连接占用15KB,约一半是内核使用。大概分析一下:1. Erlang 节点 12GB,内部因为有内存池碎片问题,实际使用9GB,也就是实际每个进程+Port占用越6K,因为采用hibernate策略,已经...
2014-11-29T17:19:00Z
2014-11-29T17:19:00Z
LittlePeng
https://www.cnblogs.com/lulu/
【摘要】上篇Erlang C1500K长连接推送服务-性能提到:150w连接,使用了23GB内存,每个连接占用15KB,约一半是内核使用。大概分析一下:1. Erlang 节点 12GB,内部因为有内存池碎片问题,实际使用9GB,也就是实际每个进程+Port占用越6K,因为采用hibernate策略,已经... <a href="https://www.cnblogs.com/lulu/p/4132374.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lulu/p/4132278.html
Erlang C1500K长连接推送服务-性能 - LittlePeng
Whatsapp已经使用Erlang在生产环境跑到96GB内存单机 3M长连接,参加:WhatsApp的Erlang世界。毕竟业务级别能达到Whatsapp那样极少,现在只有千万级,单机太多挂一台影响太大,再者就是没有多线接入,每个机房都得扔那么几台机器吧,所以1M就能满足要求。Erlang 作为长...
2014-11-29T16:05:00Z
2014-11-29T16:05:00Z
LittlePeng
https://www.cnblogs.com/lulu/
【摘要】Whatsapp已经使用Erlang在生产环境跑到96GB内存单机 3M长连接,参加:WhatsApp的Erlang世界。毕竟业务级别能达到Whatsapp那样极少,现在只有千万级,单机太多挂一台影响太大,再者就是没有多线接入,每个机房都得扔那么几台机器吧,所以1M就能满足要求。Erlang 作为长... <a href="https://www.cnblogs.com/lulu/p/4132278.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lulu/p/4050176.html
redis lua - LittlePeng
需求是在缓存最近一周内用户所有消息列表,考虑用Redis 存储;为每个存储一个独立Sorted Set,value 为消息体,Score 为MessageId,用以实现增量消息同步。 问题就来了:Sorted Set 怎么清理? -设计内存容量只允许放一周内最新的,太久了缓存意义不大,太...
2014-10-25T07:23:00Z
2014-10-25T07:23:00Z
LittlePeng
https://www.cnblogs.com/lulu/
【摘要】需求是在缓存最近一周内用户所有消息列表,考虑用Redis 存储;为每个存储一个独立Sorted Set,value 为消息体,Score 为MessageId,用以实现增量消息同步。 问题就来了:Sorted Set 怎么清理? -设计内存容量只允许放一周内最新的,太久了缓存意义不大,太... <a href="https://www.cnblogs.com/lulu/p/4050176.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lulu/p/4032365.html
erlang 虚机性能调优 - LittlePeng
erlang 默认启动参数更多的是针对电信平台实时特性,简单调整参数能很大程度降低CPU消耗,提高处理能力。1. 关闭spin_wait 设置参数:+sbwt none我上一篇文章提到:erlang 调度器CPU利用率低排查,关闭spin_wait 可能增加了调度器需要唤醒延时。关闭后CPU 基本...
2014-10-17T17:17:00Z
2014-10-17T17:17:00Z
LittlePeng
https://www.cnblogs.com/lulu/
【摘要】erlang 默认启动参数更多的是针对电信平台实时特性,简单调整参数能很大程度降低CPU消耗,提高处理能力。1. 关闭spin_wait 设置参数:+sbwt none我上一篇文章提到:erlang 调度器CPU利用率低排查,关闭spin_wait 可能增加了调度器需要唤醒延时。关闭后CPU 基本... <a href="https://www.cnblogs.com/lulu/p/4032365.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lulu/p/4032356.html
java问题排查总结 - LittlePeng
前些天发现:http://hellojava.info/ 这个站点,关于java问题排查分析总结线上故障总结其实是最有价值的,好的总结就是一个系统演进历史,是团队难得的积累沉淀。花了不少时间看了下,顺手整理了笔记:1. Hashmap 并发情况下未加锁导致OOM 嗯,死循环很常见,OOM也会有,...
2014-10-17T16:54:00Z
2014-10-17T16:54:00Z
LittlePeng
https://www.cnblogs.com/lulu/
【摘要】前些天发现:http://hellojava.info/ 这个站点,关于java问题排查分析总结线上故障总结其实是最有价值的,好的总结就是一个系统演进历史,是团队难得的积累沉淀。花了不少时间看了下,顺手整理了笔记:1. Hashmap 并发情况下未加锁导致OOM 嗯,死循环很常见,OOM也会有,... <a href="https://www.cnblogs.com/lulu/p/4032356.html" target="_blank">阅读全文</a>