转载

analysing java core dump

In this post, I will show you how you can debug a Java core file to see what caused your JVM to crash. I will be using a core file I generated in my previous post: Generating a Java Core Dump. There are different ways you can diagnose a JVM crash, listed below: The hs_err_pid log file When a fatal error occurs in the JVM, it produces an error log file called hs_err_pidXXXX.

在 OpenResty 中使用正则表达式

在 OpenResty 中使用正则表达式,社区中推荐的做法是使用ngx.re api。比如匹配一个字符串是否为 http(s) 的链接,可以这么写: local function is_http_url(s) return ngx.re.find(s, [[^https?://[\w-_?.:/+=&#%]+$]]) end 压测一下: local t = os.clock() for _ = 1, max do is_http_url("http://blog.stackoverflow.com/2016/10/Stack-Overflow-92-Podcast-The-Guerilla-Guide-to-Interviewing/?cb=1") end print("Time cost: ", os.clock() - t, " s") 结果:Time cost: 2.663408 s 另一种做法是使用 lua 的正则语法: local function is_http_url(s) return s:find("^https?://[%w-_%.%?:/%+=&#%%]+$") end 结果:Time cost: 0.652221 s 呃,怎么前者耗时是后者的四倍?lua 内置的小小状态机实现,居然打败了大名鼎鼎的 PCRE 库!说好的社区推荐呢! 仔细一瞧,前者的确漏了点东西。ngx.re默认不会缓存正则表达式编译后的结果。一般在其它编程平台上,我们都会先把字符串编译成正则表达式,再用到正则函数中。比如在 Python 里使用 re.compile。所以赶紧补上: return ngx.re.find(s, [[^https?://[\w-_?.:/+=&#%]+$]], "o") 好,这次性能有了明显提升:Time cost: 0.646518 s