Я использую службу, которая читает сообщения от Kafka
и толкает их в Cassandra
.Java Threading: чрезмерное использование ЦП
Я использую многопоточную архитектуру для того же самого.
Есть, скажем, k threads
, потребляющий предмет Kafka. Эти записи в очереди, заявленный как:
public static BlockingQueue<>
В настоящее время существует целый ряд нитей, скажем n
, которые пишут в Кассандре. Вот код, который делает это:
public void run(){
LOGGER.log(Level.INFO, "Thread Created: " +Thread.currentThread().getName());
while (!Thread.currentThread().isInterrupted()) {
Thread.yield();
if (!content.isEmpty()) {
try {
JSONObject msg = content.remove();
// JSON
for(String tableName : tableList){
CassandraConnector.getSession().execute(createQuery(tableName, msg));
}
} catch (Exception e) {
}
}
}
}
content
является BlockingQueue используется для операций чтения-записи.
Я расширяю класс Thread
при реализации потоковой передачи, и существует фиксированное количество потоков, которые продолжают выполнение, если не прерваны.
Проблема в том, что использование слишком большого количества CPU. Вот первая строка top
команды:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
46232 vishran+ 20 0 3010804 188052 14280 S 137.8 3.3 5663:24 java
Здесь выход strace
на волоске этого процесса:
strace -t -p 46322
Process 46322 attached
15:18:47 sched_yield() = 0
15:18:47 sched_yield() = 0
15:18:47 sched_yield() = 0
15:18:47 sched_yield() = 0
15:18:47 sched_yield() = 0
15:18:47 sched_yield() = 0
15:18:47 sched_yield() = 0
15:18:47 sched_yield() = 0
15:18:47 sched_yield() = 0
15:18:47 sched_yield() = 0
15:18:47 sched_yield() = 0
15:18:47 sched_yield() = 0
15:18:47 sched_yield() = 0
15:18:47 sched_yield() = 0
15:18:47 sched_yield() = 0
....and so on
Почему я использую Thread.yield()
, из-за this
Если вам нужна другая информация для отладки, сообщите мне.
Теперь вопрос в том, как минимизировать использование ЦП?
, который это сделает! :) –
Можете ли вы добавить фрагмент кода для этого. Я попробую блок в ответе @ Роберта. – vish4071
Отправленный код snippet – Madhusudhan