У меня проблема с моей JVM, запущенной на CentOS 6.0 с openJDK 1.7.0_51 64Bit. Моя система представляет собой 4-ядерную систему с 8 ГБ рамом.Java Многопоточное приложение использует только один Core
Я использую многопоточное приложение Java, которое я написал сам. Он должен вставить тонны данных в базу данных NoSQL. Для этого я создаю 4 потока, используя «CachedThreadPoolExecutor» из java.concurrent.Executors.
Я создаю экземпляр 4 рабочих, которые реализуют интерфейс «Runnable». После этого я запускаю Thread, используя threadpool. Вот мой код:
public void startDataPump(int numberOfWorkers){
//class "DataPump" implements runnable
for (int i = 0; i < numberOfWorkers; i++){
DataPump pump = new DataPump();
//"workerList" contains all workers and is a simple arrayList to keep track of the workers
workerList.add(pump);
//"workers" is the thradpool that has been
//initialized earlier with "Executors.newCachedThreadPool()
workers.execute(pump);
}
}
При запуске этого параметра, используя параметр 4, он будет порождать 4 нити в пуле Threadpool. Я предположил, что JVM или моя ОС будут достаточно умны, чтобы планировать эти потоки во всех моих ядрах. ОДНАКО, только одно ядро моего процессора работает на 100%, остальные остаются почти бездействующими.
Я делаю что-то не так в своем коде или это проблема с JVM/OS. Если да, могу ли я что-нибудь с этим сделать? Запуск этого приложения только на 1 ядре крайне замедляет работу всего приложения.
Помощь очень ценится :)
Что делает/proc/cpuinfo показать на ОС? –
вы также можете попробовать nproc или lscpu, чтобы получить основную информацию с компьютера –
, если проблема связана с привязкой к процессору - вы можете установить schedutils (если еще не там): yum install schedutils –