用ffi加载动态链接库,压测时发现CPU占用严重。但是单独把动态链接库相关的代码代码抽出来后性能又没问题。
后来一点一点删减代码做压测,发现问题出在下面这一行
package.path = package.path..";/my/www/path/?.lua"
如果加上这一行,性能就严重下降,CPU飙高,如果去掉,性能就很稳定。
动态链接库加载的相关代码
local ffi = require 'ffi'
module(...)
ffi.cdef[[
int reload_ipdata(const char * geoipfn,const char * myipfn);
char *IP_country_by_addr(const char *addr);
]]
function getgeo(ip)
if not ip then return nil end
local libletvip = ffi.load('libletvip')
local country = libletvip.IP_country_by_addr(ip)
return ffi.string(country)
end
不知道这个是否有解。