выполнение службы (openoffice headless) в chroot происходит медленно - PullRequest
1 голос
/ 27 мая 2010

Я создал среду chroot для Ubuntu (с помощью debootstrap) и запустил openoffice как сервис для конвертации файлов с использованием unoconv. Это работает, но он тратит около 20 секунд, чтобы сделать преобразования, которые меньше 1 секунды за пределами chroot-тюрьмы. Рассказывая это, я вижу, что это дополнительное время тратится на некоторые операции с сокетами, время ожидания которых истекает, те же самые операции, которые хорошо работают без среды chroot. Однако аналогичные операции работают нормально.

Есть предложения?


стартовый сервер (chrooted):

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

вызывая его (тоже chrooted):

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

1 Ответ

3 голосов
/ 14 февраля 2012

unoconv делает некоторые поиски DNS. Я добавил это в мой / etc / hosts:

127.0.0.1 localhost localhost.(none)

И это значительно улучшило ситуацию.

...