最新 | 最热门 | 最高评价

+0  遭遇lj_str_new

Tag: Technical | Lua | OpenResty | Performance
老王 发于 2020年09月15日 20:18 | 点击: 437 | 展开摘要
话说前几天我刚通过 mlcache 优化了热数据的问题,屁股还没坐热乎呢,就发现系统性能又下降了,本着自己挖的坑含泪也要填上的原则,我再一次开始了性能调优之旅。

对某个 nginx 进程执行 perf top

毫无疑问,从 perf top 结果来看,lj_str_new 已经成为了性能最大的短板。不过我们还是要搞一个 lua 语言级别的火焰图看着才靠谱,于是有了下图:

优化前的火焰图

不出所料,lj_str_new 非常宽,不过没有更详细的调用栈信息,不方便判断问题

查看全文: http://www.udpwork.com/item/17716.html

+0  记一次性能调优

Tag: Technical | Lua | OpenResty | Performance
老王 发于 2020年09月12日 16:45 | 点击: 412 | 展开摘要
面对性能调优问题,很多人往往只是单纯的套用既往的经验:先试试一个,不行再试试另一个。面对简单的问题,如此通常能事半功倍;但是当面对复杂问题的时候,单凭经验往往并不能达到立竿见影的效果,此时我们需要更精准的判断性能短板在哪里。

一个 openresty 项目,不了解 openresty 的可以参考我以前的文章,从 top 运行结果看,软中断 si 分配不均,绝大部分压在了 CPU5 上,导致 CPU5 的空闲 id 接近于零,最终的结果是其它 CPU 虽然还有空闲 id,但是

查看全文: http://www.udpwork.com/item/17717.html

+0  关于OpenResty里的ngx.on_abort

Tag: Technical | OpenResty
老王 发于 2020年04月13日 14:24 | 点击: 348 | 展开摘要
关于 OpenResty 里的 ngx.on_abort,官方文档里是这样说明的:

Registers a user Lua function as the callback which gets called automatically when the client closes the (downstream) connection prematurely.

也就是说:当客户端提前关闭连接的时候,在 ngx.on_abort 里注册的函数会被触发,下面做个实验看看,

查看全文: http://www.udpwork.com/item/17725.html

+0  如何在OpenResty里实现代码热更新

Tag: Technical | OpenResty
老王 发于 2020年03月25日 15:26 | 点击: 448 | 展开摘要
所谓「代码热更新」,是指代码发生变化后,不用 reload 或者 graceful restart 进程就能生效。比如有一个聊天服务,连接着一百万个用户的长连接,所谓代码热更新就是在长连接不断的前提下完成代码更新。实际上因为所有的 require 操作都是通过 package.loaded 来加载模块的,只要代码是以 module 的形式组织的,那么就可以通过 package.loaded 实现代码热更新,并且基本不影响性能。

下面让我们做个实验来说明一下如何实现代码热更新

查看全文: http://www.udpwork.com/item/17726.html

+0  手把手教你用OpenResty里的FFI

Tag: Technical | OpenResty
老王 发于 2020年03月08日 21:13 | 点击: 355 | 展开摘要
了解 OpenResty 的人应该知道,OpenResty 原本的 API 都是基于 C 实现的,不过在新版里都已经改成了基于 FFI 实现的,为什么这么做?因为 FFI 在效率上更有优势,除此以外,FFI 还有一个优点是可以很便利的和 C 交互,我们不妨设想一下,C 语言有那么多成熟的库,通过 FFI,我们可以轻而易举的引入到自己的应用中,何乐而不为呢?

本文通过 Hashids 手把手教你用 OpenResty 里的 FFI。说起 Hashids,它的功能是把一个正整数

查看全文: http://www.udpwork.com/item/17727.html

+0  一个尾调用相关的诡异报错信息

Tag: Technical | OpenResty
老王 发于 2020年03月03日 19:32 | 点击: 450 | 展开摘要
一个 OpenResty 的接口报错了,我查了一下日志,发现如下报错信息:

bad argument #1 to ‘test’ (string expected, got userdata)

看上去这就是一道送分题啊:无非就是 test 函数的第一个参数类型应该是 string,实际传递的却是 userdata。就当我觉得可以轻而易举解决问题的时候,突然发现 test 函数定义就没有参数,调用的时候也没传参数,真是太诡异了。

群里问了一些网友,结

查看全文: http://www.udpwork.com/item/17728.html

+0  如何扩展一个OpenResty模块

Tag: Technical | OpenResty
老王 发于 2020年02月19日 14:07 | 点击: 376 | 展开摘要
因为 Lua 本身并没有继承之类的语法,所以我们不能通过 OOP 的套路来扩展模块,不过实际上对于 Lua 来说,扩展一个模块有更简单的方法,下面我们以 lua-resty-string 模块中的 aes 加解密功能为例子来说明一下。

在 aes 加解密的过程中,有一个「填充」的过程,相关技术细节可以参考我以前写的「聊聊AES」,当然,不懂也没关系,你只要知道目前的 resty.aes 不支持配置填充的功能即可,因为 OpenSSL 缺省是激活了填充的,所以一旦我们需要自定

查看全文: http://www.udpwork.com/item/17729.html

+0  关于Cosocket的SocketBusy报错

Tag: Technical | OpenResty
老王 发于 2020年01月15日 14:06 | 点击: 377 | 展开摘要
关于 OpenResty 的 cosocket,文档里有如下一段描述:

the cosocket object here is full-duplex, that is, a reader “light thread” and a writer “light thread” can operate on a single cosocket object simultaneously (both “light thr

查看全文: http://www.udpwork.com/item/17730.html

+0  网站统计中的数据收集原理及实现

Tag: 数据挖掘及机器学习 | nginx | openresty | 数据收集 | 网站统计 | 谷歌分析
ericzhang 发于 2012年10月24日 15:12 | 点击: 2166 | 展开摘要
网站数据统计分析工具是网站站长和运营人员经常使用的一种工具,比较常用的有谷歌分析、百度统计和腾讯分析等等。所有这些统计分析工具的第一步都是网站访问数据的收集。目前主流的数据收集方式基本都是基于javascript的。本文将简要分析这种数据收集的原理,并一步一步实际搭建一个实际的数据收集系统。

数据收集原理分析

简单来说,网站统计分析工具需要收集到用户浏览目标网站的行为(如打开某网页、点击某按钮、将商品加入购物车等)及行为附加数据(如某下单行为产生的订单金额等)。早期的网站

查看全文: http://www.udpwork.com/item/8520.html
|<<<1>>>| 一共1页, 9条记录