silly是一个基于Lua的高并发网络框架,最近为了增加etcd支持,作者决定给定时器增加取消功能。作者使用内存池解决session到node指针的映射问题,通过计算偏移量反向推理出对应的node指针的值。作者优化了代码,减少闭包的创建,降低代码重复度,并优化性能。
silly是一个基于Lua的高并发网络框架,最近为了增加etcd支持,作者决定给定时器增加取消功能。作者使用内存池解决session到node指针的映射问题,通过计算偏移量反向推理出对应的node指针的值。作者还优化了代码,利用浪费的4字节减少闭包的创建,降低代码重复度,优化性能。整个数据结构包括node、page、pool、slot_root和slot_level。
最近在给silly增加prometheus数据库支持时,发现在docker中,silly占用了将近110MiB虚拟内存,而在宿主机中只有48.32MiB。通过查看虚拟内存分配和系统调用,发现一些大的匿名内存段和jemalloc分配的内存大小非常接近。进一步分析发现,这是glibc的一个特性,用于提高性能。同时还发现了一个奇怪的现象,一块大内存包含了一个文件的内存映射,经过验证发现是因为jemalloc在mmap分配内存后立即使用munmap释放了这块地址空间。这提示我们在监控内存分配时需要同时监控mmap和munmap系统调用。
最近在给silly增加prometheus数据库支持时发现,在docker中,silly刚起动就占了将近110MiB虚拟内存。通过查看虚拟内存的分配,发现其中一块内存大小和jemalloc向应用程序分配的内存大小非常接近,怀疑这块内存就是jemalloc所使用的虚拟内存大小。通过使用strace确认了这一点。在docker中查看110MiB内存来源时发现一大块内存一个字节都没有使用,怀疑是glibc的一个bug,但后来发现这是glibc的一个特性。同时还发现一个奇怪的现象,一块大内存包含了一个文件的内存映射,经过分析发现是jemalloc在mmap分配了一块内存后,随即使用munmap给释放了。这给了一个提示,监控内存分配时需要同时监控mmap和munmap系统调用。
silly是基于Lua语言的Coroutine机制而实现的一个高并发网络框架。 其coroutine调度机制很 … 继续阅读“为silly增加了互斥锁” The post 为silly增加了互斥锁 first appeared on 重归混沌的BLOG.
silly是基于Lua语言的Coroutine机制而实现的一个高并发网络框架。 其coroutine调度机制很 ... 阅读更多 The post 为silly增加了互斥锁 first appeared on 重归混沌的BLOG.
I started with thestoryofharper.com and then I created the site for hiromi and myself. So after writing all the cool classes to make this easy I decided to make the blogs.nata2.org site and then...
Apparently, the article Weapons Of Mass Stupidity is enough to garner you attention by the FBI. woah. That is rather messed up.
So I pretty much finished my project for work. I am done and now it is sent to another group to test it. Wooha. this weekend was nice. I finally got some sleep. but for some reason I wasted all of...
完成下面两步后,将自动完成登录并继续当前操作。