Hello!
2014-02-27 5:25 GMT-08:00 朱峰:
>
> 通过 drizzle-nginx-module 去操作数据库,如果返回行数过大就会出现错误:
> 2014/02/27 19:54:41 [emerg] 23373#0: *3 malloc(8388608) failed (12: Cannot
> allocate memory) while sending query to drizzle upstream
[...]
>
这是 NGINX 通过你的系统分配器(一般是 libc 的分配器)分配 8388608 字节大小的内存块时,系统分配器(malloc)返回了错误。常见的情形是
1. 那时你的机器已没有空闲内存;
2. 那时你的机器还有一些空闲内存,但地址空间里已经没有那么大的连续的空闲块可用(一般是因为过多的内存碎片)。
> 设置 drizzle_buffer_size 好像不起作用
drizzle_buffer_size 并不需要放得下整个数据流,因为 ngx_drizzle 都 是流式处理模式。
值得一提的是,libdrizzle 库在内存使用上比较浪费。建议对于较大数据量的查询尽量使用 lua-resty-mysql 库:
https://github.com/agentzh/lua-resty-mysql
Regards,
-agentzh