Проблемы с производительностью Node.js (Mac OSX) — Процессы

#linux #node.js #macos #process #spawn

#linux #node.js #macos #процесс #порождение

Вопрос:

я надеюсь найти здесь небольшую помощь.

мы используем node, mongodb, supertest, mocha и spawn в нашей тестовой среде.

мы попытались улучшить нашу тестовую среду mocha, чтобы запускать тесты параллельно, потому что наши тестовые примеры теперь выполняются почти 5 минут! (600 случаев)

мы создаем, например, 4 процесса и запускаем тесты параллельно. это очень успешно, но только на Linux.
на моем mac тесты по-прежнему выполняются очень медленно. похоже, что разные процессы на самом деле не выполняются параллельно.

время тестирования:

macosx:
— параллельное выполнение 9 тестов: 37 секунд
— параллельное выполнение 9 тестов: 41 секунда

linux:
— параллельный запуск 9 тестов: 16
секунд — параллельный запуск 9 тестов: 25 секунд

maxosx в начале 2011:

10.9.2
16 ГБ оперативной
памяти core i7 2,2 ГГц
физические процессоры: 1
ядер: 4
потоков: 8

linux dell:

ubuntu
8 ГБ оперативной
памяти core i5-2520M 2,5 ГГц
физические процессоры: 1
ядра: 2
потоки: 4

мои вопросы:

  1. есть ли какие-либо советы по повышению производительности процесса на macosx? (кроме ulimit, launchctl (maxfiles)?)

  2. почему тесты выполняются намного быстрее в Linux?

спасибо, Кейт

Комментарии:

1. Учитывая характеристики ваших машин, я сомневаюсь, что дополнительные 8 гигабайт оперативной памяти и вычислительная мощность сильно влияют на ситуацию, особенно с учетом модели одного процесса nodes и того, что вы запускаете только 4 процесса. Я сомневаюсь, что для Linux-машины 8 гигабайт, 2,5 ГГц и 4 потока вообще являются узким местом. Таким образом, я бы на самом деле ожидал, что время, которое процессор тратит на выполнение ваших тестов, будет примерно эквивалентно для обеих машин. Меня бы больше интересовала производительность вашего дискового ввода-вывода, учитывая, что вы используете mongo. Ваш дисковый ввод-вывод имеет наибольший потенциал для замедления работы. Какие там спецификации?

2. macosx: Toshiba 5400 ОБ / мин 8 МБ linux: Seagate 7200 об / мин 16 МБ

3. @ChrisCM может быть на что-то. blog.mongodb.org/post/40769806981 / … может быть вам интересно.

4. запуск mongoperf на обеих системах: macosx намного, намного быстрее!

5. Mongoperf проверяет очень специфические области производительности диска. Глядя на ваши спецификации, предположить, что ваш диск Mac работает быстрее, чем ваш диск Linux, нелепо. Вы должны внимательно относиться к результатам mongoperf и учитывать, какие типы дискового ввода-вывода важны для вашего приложения. Возможно, время произвольного доступа не имеет значения, и у вас много последовательных операций ввода-вывода, в которых привод с частотой вращения 7200 об / мин полностью уничтожит привод с частотой вращения 5400 об / мин… Помните, что ваш диск с частотой 5400 об / мин, вероятно, является диском для ноутбука, поэтому он намного меньше, поэтому случайные чтения будут быстрыми из-за меньшей головки диска, но медленными

Ответ №1:

Я скопировал свой комментарий здесь, поскольку он описывает большую часть ответа.

Учитывая характеристики ваших машин, я сомневаюсь, что дополнительные 8 гигабайт оперативной памяти и вычислительная мощность сильно влияют на ситуацию, особенно с учетом модели одного процесса nodes и того, что вы запускаете только 4 процесса. Я сомневаюсь, что для Linux-машины 8 гигабайт, 2,5 ГГц и 4 потока вообще являются узким местом. Таким образом, я бы на самом деле ожидал, что время, которое процессор тратит на выполнение ваших тестов, будет примерно эквивалентно для обеих машин. Меня бы больше интересовала производительность вашего дискового ввода-вывода, учитывая, что вы используете mongo. Ваш дисковый ввод-вывод имеет наибольший потенциал для замедления работы. Какие там спецификации?

Ваши характеристики: macosx: Toshiba 5400 ОБ / мин 8 МБ linux: Seagate 7200 об / мин 16 МБ

Ваш диск Linux значительно, в 1,33 раза быстрее, чем ваш диск Mac, а также имеет значительно больший кэш. Для приложений на основе баз данных производительность жесткого диска имеет решающее значение. Большая часть времени, проводимого в вашем приложении, будет ждать ввода-вывода, особенно в узлах с однопроцессорным методом выполнения работы. Я бы предположил, что это является причиной 90% разницы в производительности, а остальное списать на тот факт, что в Linux, вероятно, происходит меньше дерьма в фоновом режиме, что еще больше усугубляет проблемы с производительностью вашего диска Mac.

Кроме того, запуск процессов с несколькими узлами вряд ли поможет этому. Поскольку процессорное время не является вашим узким местом, запуск слишком большого количества процессов просто замедлит работу вашего диска. Еще одним доказательством того, что это проблема, является то, что производительность нескольких процессов в Linux пропорционально выше, чем производительность нескольких процессов на Mac. 1 процесс почти максимизирует производительность вашего накопителя 5400, и поэтому вы не видите значительного увеличения производительности от запуска нескольких процессов. В то время как процессы с несколькими узлами Linux используют диск в полной мере. Вы, вероятно, увидите снижение отдачи от ОС Linux, если будете запускать гораздо больше процессов, если, конечно, вы не перейдете на SSD.