程序锁定但不是在通过strace

时间:2015-07-12 09:02:44

标签: linux wkhtmltoimage

我正在使用wkhtmltoimage进行服务器端渲染,每次运行都锁定在" 88%加载" 1-2分钟。我决定调试通过strace发生的事情,但是在一个完全奇怪的扭曲中程序没有锁定。我发现这是完全可重复和一致的。为什么在所有权利下程序应该更慢的时候才能使程序变得更快?!

不用strace运行:

user@server:~/public_html/shapes$ time wkhtmltoimage --disable-smart-width --width 970 --format jpg '[THE URL]' '[THE PATH].jpg'
Loading page (1/2)
Rendering (2/2)
Done

real    1m45.724s
user    1m42.887s
sys     0m0.623s

运行WITH strace:

user@server:~/public_html/shapes$ time strace wkhtmltoimage --disable-smart-width --width 970 --format jpg '[THE URL]' '[THE PATH].jpg'
execve("/usr/local/bin/wkhtmltoimage", ["wkhtmltoimage", "--disable-smart-width", "--width", "970", "--format", "jpg", "[THE URL]"..., "[THE PATH]"...], [/* 21 vars */]) = 0
brk(0)                                  = 0x311a000
...
exit_group(0)                           = ?
+++ exited with 0 +++

real    0m6.526s
user    0m0.582s
sys     0m0.377s

服务器是私有的,所以我已经编辑了URL和PATH,但输出是正确的。此外,两次运行都会创建正确的输出,并且我已清除临时文件以确保它不是缓存问题。我已经完成了10次这样的运行,以确保它不是一个随机的神器,但它始终如一地发生,因此唯一合乎逻辑的结论是,strace以某种方式改变了wkhtmltoimage的行为,我真的希望有人能分辨出来我什么。如果我知道为什么strace使程序没有锁定,我可能会找到解决方案。

这是挂起的过程:

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
  772 sigapp    20   0 1485600  45760  14524 R  99.8  2.2   0:57.02 wkhtmltoimage

作为root我可以使用strace -p $(pidof wkhtmltoimage)附加到挂起的图像,结果是:

gettimeofday({1436692542, 446246}, NULL) = 0
gettimeofday({1436692542, 556958}, NULL) = 0
gettimeofday({1436692542, 557161}, NULL) = 0
gettimeofday({1436692542, 659238}, NULL) = 0
gettimeofday({1436692542, 771381}, NULL) = 0
gettimeofday({1436692542, 771686}, NULL) = 0
gettimeofday({1436692542, 875783}, NULL) = 0
gettimeofday({1436692542, 987490}, NULL) = 0
gettimeofday({1436692542, 987781}, NULL) = 0
gettimeofday({1436692543, 84764}, NULL) = 0
...

系统:Linux服务器3.13.0-30-通用#55-Ubuntu SMP Fri 7月4日21:40:53 UTC 2014 x86_64 x86_64 x86_64 GNU / Linux(在2 CPU Xen Guest上运行)

软件:wkhtmltoimage 0.12.2.1(带补丁qt)< - 从官方网站通过.deb文件安装

我已阅读此内容,但不确定是否相关:Hung processes resume if attached to strace

更新:

尝试使用其他程序webkit2pdf并查看锁定。这个时间strace输出是不同的。这两个程序都使用webkit。:

root@server:~# strace -p `pidof webkit2pdf`
Process 4699 attached
restart_syscall(<... resuming interrupted call ...>

成功运行strace wkhtmltoimage ...后,我可以看到类似的调用但不是很多,前面是mmap:

mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = 0x7f9dbbbc1000
gettimeofday({1436696839, 361942}, NULL) = 0
gettimeofday({1436696839, 362254}, NULL) = 0
gettimeofday({1436696839, 362505}, NULL) = 0
gettimeofday({1436696839, 362787}, NULL) = 0
gettimeofday({1436696839, 363172}, NULL) = 0
gettimeofday({1436696839, 363568}, NULL) = 0
gettimeofday({1436696839, 363913}, NULL) = 0
mmap(NULL, 28672, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = 0x7f9db5000000
gettimeofday({1436696839, 364701}, NULL) = 0
mmap(NULL, 28672, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = 0x7f9db4ff9000
gettimeofday({1436696839, 365612}, NULL) = 0
gettimeofday({1436696839, 365956}, NULL) = 0

因此,根据 pvg 的评论,这很可能是setAttributestrace下正常工作而不能正常工作的锁定机制。

0 个答案:

没有答案