JFK2005 Цитата: Скачал отсюда Multitran 2012. Сейчас попробую залить его в телефон и проиндексировать.
При индексировании этих Мультитранов использование памяти процессом goldendict было следующим:
En-Ru 1,3ГБ (но если после Ru-En подряд, то- 2,8ГБ)
Ru-En 2,6ГБ
Добавлено: Tvangeste Цитата: Тогда попробуйте еще вот что, запустите максимально возможное число словарей, чтобы GoldenDict еще не падал. Потом вот такая команда:
Код:
lsof -p `pgrep goldendict` | wc -l
Она покажет сколько открыто файлов процессом goldendict. По идее должно быть около 200 + 2 * количество_словарей. Получиться в вашем случае должно около 2500 открытых файлов. А вот почему дальше не дает - это большой вопрос.
Попробуйте еще раз в своей системе увеличить количество открытых файлов до 20 тыщ, например, для пробы.
Вначале немного истории:
Цитата: > lsof -p 'pgrep goldendict' | wc -l
lsof: illegal process ID: pgrep goldendict
lsof 4.80
latest revision: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/
latest FAQ: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/FAQ
latest man page: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_man
usage: [-?abhlnNoOPRstUvVX] [+|-c c] [+|-d s] [+D D] [+|-f[gG]]
[-F [f]] [-g [s]] [-i [i]] [+|-L [l]] [+m [m]] [+|-M] [-o [o]]
[-p s] [+|-r [t]] [-S [t]] [-T [t]] [-u s] [+|-w] [-x [fl]] [--] [names]
Use the ``-h'' option to get more help information.
0
Посмотрел в Системном мониторе PID процесса goldendict:
Цитата: > lsof -p 11989 | wc -l
113
Таким образом, количество используемых свёрнутым в значок в Системном лотке GD файлов без словарей составило 113.
Затем открыл окно словари:
Цитата: > lsof -p 11989 | wc -l
111
Далее скидывал в путь для поиска словарей по 1000 Ваших "словарей", нажимал кнопку Пересканировать и запускал выше указанную команду, получая следующий её вывод:
Цитата: 2120
4120
6120
Вышел из программы и запустил её снова: она запустилась, но забивала ядро процессора в режиме системы. Когда я попытался запустить окно Словари, то программа вылетела, выдав на консоль:
Цитата: Ошибка сегментирования
Убрал все словари и добавил по новой по 1000шт. 2000 словарей. Вышел из программы и запустил её вновь. Она не запустилась, выдав на консоль:
Цитата: > ./AppRun
Load done
getResource: gdlookup://localhost?blank=1
scheme: gdlookup
host: localhost
getResource: gdlookup://localhost?blank=1
scheme: gdlookup
host: localhost
getResource: gdlookup://localhost?word=Добро пожаловать!&group=4294967295
scheme: gdlookup
host: localhost
In-place finish.
Ошибка сегментирования
Удалил все словари и запустил программу. Стал добавлять по 1000 словарей с пересканированием в окне Словари. Соответствующий вывод команды:
Цитата: 2120
4120
6120
8120
После следующих 1000 словарей программа, естественно, вылетела со следующим выводом на консоль:
Цитата: GoldenDict (dictzip.c): Cannot open data file ".../3/test-3166.dsl" for read
dictzip.c: Слишком много открытых файлов
GoldenDict (dictzip.c): Cannot open data file ".../3/test-3167.dsl" for read
dictzip.c: Слишком много открытых файлов
(Уж не знаю, почему 3166 и 3167, если последний раз добавил 4ххх).
Сделал скрипт запуска программы 65536.run следующего содержания:
Цитата: #! /bin/sh
#
#
ulimit -Sn 65536
ulimit -a
./AppRun
Удалил все словари и запустил скрипт. Вывод на консоли запуска скрипта:
Цитата: > ./65536.run
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 139264
max locked memory (kbytes, -l) unlimited
max memory size (kbytes, -m) unlimited
open files (-n) 65536
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) unlimited
cpu time (seconds, -t) unlimited
max user processes (-u) 139264
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
Load done
getResource: gdlookup://localhost?blank=1
scheme: gdlookup
host: localhost
getResource: gdlookup://localhost?blank=1
scheme: gdlookup
host: localhost
getResource: gdlookup://localhost?word=Добро пожаловать!&group=4294967295
scheme: gdlookup
host: localhost
In-place finish.
====reading 57045 bytes
Стал добавлять по 1000 словарей с пересканированием в окне Словари. Соответствующий вывод команды:
Цитата: 2112
4120
6120
8120
10120
12120
14120
16120
18120
20120
Нажал кнопку ОК окна Словари. Вывел статью card-9999. Закрыл окно (в значок в системном лотке). Открыл окно (щёлкнув не по значку в лотке, а запуска программы, так как тестировал последнюю портативную сборку с ранее упомянутым появившимся багом). Всё работает. Вышел из программы. Запустил скрипт снова: программа загрузилась. Вывел статью card-9999. Оключил все словари (сняв рекурсивность), пересканировал и нажал ОК. Подключил все словари (поставив рекурсивность), пересканировал и нажал ОК. Всё работает. Но потом попробовал добавить все словари через Ctrl+F5: программа вылетела и не запускалась всё с теми же ошибками сегментирования. После же удаления всех словарей и последующего добавления всех их пересканированием в окне Словарей программа опять вылетела после нажатия ОК, но потом запустилась.
После изменения системных настроек на предел 65536 программа запустилась из автозагрузки. Но после выхода из программы повторно запустилась только пару раз из десятка попыток (всё та же пресловутая Ошибка сегментирования). И после перезагрузки комп-а не автозагрузилась. Удалил все словари, запустил программу, добавил обратно и пересканировал. Всё работает. Перезагрузил комп.- не автозагрузилась. Оставил 4000 словарей и перезагрузил комп.- автозагрузилась.
Переделал системные настройки на оба предела 8192 и перезагрузил комп.- не автозагрузилась и не запускалась.
Переделал настройки на 65536. Удалил словари и добавил по 1000 с пересканированием до 4000. Перезагрузил комп.- автозагрузилась, но с забивкой 1 ядра в режиме системы. После выхода из программы запустилась нормально. После перезагрузки комп-а- опять с забивкой ядра (перезапуском уже неустраняемой).
Работает без проблем только когда 1 папка (1000 словарей).
ВЫВОД: назвать это стабильной работой GoldenDict никак нельзя...
ДЛЯ СРАВНЕНИЯ.
Сконвертировал Ваши словари в IFO формат.
Подключил к StarDict 2000 словарей (у этой программы подключение может происходить только при её запуске). Вывод команды: 12176. Перезапустил программу. Вывод команды: 12176. Перезагрузил комп. Вывод команды: 12180. Перезапустил программу. Вывод команды: 12176. Подключил все 10000 словарей. Вывод команды: 60176. Нашёл статью card-9999. Перезагрузил комп. Вывод команды: 60179. Перезапустил программу Вывод команды: 60177. Нашёл статью card-9999.
ВЫВОД: это называется стабильная работа StarDict...