1

ubuntu chroot 環境を (debootstrap を使用して) 作成し、unoconv を使用してファイルを変換するサービスとして openoffice を開始しました。動作しますが、chroot jail の外で 1 秒未満の変換を行うのに約 20 秒かかります。調べてみると、この余分な時間が、タイムアウトの期限が切れるソケット操作に費やされていることがわかります。同じ操作は、chroot 環境がなくてもうまく機能します。ただし、同様の操作は正常に機能します。

なにか提案を?


サーバーの起動 (chroot):

soffice -invisible -headless -nologo -nodefault "-accept=socket,host=localhost,port=8301;urp;StarOffice.ComponentContext" -env:UserInstallation=ootest2

それを呼ぶ(クルートも):

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/dev
    /sys /var/local/chrootest/sys
    proc-chroot /var/local/chrootest/proc
    devpts-chroot /var/local/chrootest /dev/pts

4

1 に答える 1

3

unoconv は、いくつかの奇妙な DNS ルックアップを行います。これを /etc/hosts に追加しました:

127.0.0.1 localhost localhost.(none)

そして、それは物事を大幅に改善しました。

于 2012-02-14T16:06:50.970 に答える