我创建了一个ubuntu chroot环境(使用debootstrap),并启动openoffice作为一个服务,使用unoconv转换文件。它可以工作,但在克洛特监狱外,它花了大约20秒来做低于1秒的转换。我可以看到,这个额外的时间花在了一些超时的套接字操作上,这些操作在没有chroot环境的情况下也能正常工作。不过,类似的操作也可以。
有什么建议吗?
启动服务器(chrooted):
soffice -invisible -headless -nologo -nodefault "-accept=socket,host=localhost,port=8301;urp;StarOffice.ComponentContext" -env:UserInstallation=ootest2
称之为(chrooted too):
strace unoconv -f pdf -p 8300 simple_test.docx
超时跟踪:
socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 4
connect(4, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, 16) = 0
fcntl(4, F_GETFL) = 0x2 (flags O_RDWR)
fcntl(4, F_SETFL, O_RDWR|O_NONBLOCK) = 0
poll([{fd=4, events=POLLOUT}], 1, 0) = 1 ([{fd=4, revents=POLLOUT}])
sendto(4, "M#\1\0\0\1\0\0\0\0\0\0\tlocalhost\6(none)\10mo"..., 47, MSG_NOSIGNAL, NULL, 0) = 47
poll([{fd=4, events=POLLIN}], 1, 5000) = 0 (Timeout)
close(4) = 0
无超时的类似跟踪(相同的unoconv操作):
socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 4
connect(4, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, 16) = 0
fcntl(4, F_GETFL) = 0x2 (flags O_RDWR)
fcntl(4, F_SETFL, O_RDWR|O_NONBLOCK) = 0
poll([{fd=4, events=POLLOUT}], 1, 0) = 1 ([{fd=4, revents=POLLOUT}])
sendto(4, "M#\1\0\0\1\0\0\0\0\0\0\tlocalhost\6(none)\10mo"..., 47, MSG_NOSIGNAL, NULL, 0) = 47
poll([{fd=4, events=POLLIN}], 1, 5000) = 1 ([{fd=4, revents=POLLIN}])
ioctl(4, FIONREAD, [47]) = 0
recvfrom(4, "M#\201\202\0\1\0\0\0\0\0\0\tlocalhost\6(none)\10mo"..., 1024, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, [16]) = 47
close(4) = 0
chroot详细信息:
使用dchroot将其用作普通用户
已装入dev、proc等(fstab):
/tmp/var/local/chrootest/tmp
/dev/var/local/chrootest/开发
/系统/var/local/chrootest/sys
进程chroot/var/local/chrootest/proc
dev pts chroot/var/local/chrootest/dev/pts
最佳答案
unoconv做了一些古怪的dns查找。我在/etc/hosts中添加了这个:
127.0.0.1 localhost localhost.(none)
它使情况明显好转。