EC2 и Java: худшая производительность при использовании потоков - PullRequest
2 голосов
/ 20 января 2012

Я сталкиваюсь с определенным поведением при использовании Amazon EC2 и Java, которое трудно понять.У меня есть код, который использует iText для разделения одного многостраничного PDF-файла на несколько файлов (по одному файлу на страницу).У меня есть около 1 миллиона страниц для извлечения (около 2500 исходных файлов), и поэтому я делаю тесты на EC2, чтобы определить, какая установка лучше всего подойдет для такой работы.

Я создал небольшое приложение (ссылка ниже), которое обрабатывает каждый исходный файл последовательно, без запуска какого-либо рабочего потока, и которое также может выполнять ту же задачу, используя потоки Java через Executors.

На моем локальном Macbook Pro многопоточная версия работает примерно на 30-40% быстрее, чем последовательная, но на каждом экземпляре EC2, который я пробовал, многопоточная версия работала намного хуже, чем последовательная.

Я пробовал с маленьким экземпляром, большим и очень большим процессором.Я пытаюсь понять, что может привести к таким плохим результатам для многопоточной версии;если это что-то с моим кодом, или вводом / выводом в EC2, или просто что для этой конкретной задачи потоки действительно плохой выбор?Я принимаю любые подсказки.

Соответствующий код находится здесь: https://gist.github.com/1641643 (извините за «флаговое программирование», было проще переключаться между тестами).Я пробовал разные значения для Executors.newFixedThreadPool (2, 4, 8 и т. Д.) Без каких-либо существенных изменений в результатах.

Ответы [ 2 ]

1 голос
/ 20 января 2012

Также дикая догадка, но проверьте версию jdk, на которой вы выполняете свои тесты - AMI Amazon, которые я использовал, были настроены с openJDK (если вы используете версию sun, она обязательно будет работать по-другому).

1 голос
/ 20 января 2012

Неверное предположение, но если все потоки читают и пишут на один жесткий диск, это заставляет диск постоянно менять место чтения и записи.В то время как в однопоточном подходе поток может сразу прочитать входной файл и записать результат сразу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...