Хроника как увеличить процессоры?

Я использую очередь хроник 5.16.8.

Я получаю это предупреждение

net.openhft.chronicle.threads.Pauser     : Using Pauser.sleepy() as not enough processors, have 1, needs 8+

Можно ли увеличить этот процессор?

исходный код

Мой подход здесь заключается в использовании карты хроник для хранения программы чтения индексов. Я думаю, я могу включить такое же поведение в recordHistory ...

Мне пришлось использовать преобразованный Джексон Json ... Я не понял, как использовать метод writeDocument.

Цикл While true, это еще одна неприятная вещь, которая у меня есть здесь... Я не мог понять, как найти последний индекс в очереди.

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import net.openhft.chronicle.map.ChronicleMap;
import net.openhft.chronicle.map.ChronicleMapBuilder;
import net.openhft.chronicle.queue.ChronicleQueue;
import net.openhft.chronicle.queue.ExcerptAppender;
import net.openhft.chronicle.queue.ExcerptTailer;
import net.openhft.chronicle.queue.RollCycles;
import net.openhft.chronicle.queue.impl.single.SingleChronicleQueueBuilder;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;
import java.io.File;
import java.util.LinkedList;
import java.util.List;



@Service
public class QueueService {

    public static final String INDEX = "index";

    private ObjectMapper mapper = new ObjectMapper(); // json converter

    @PostConstruct
    public void init() {
        mapper.registerModule(new JavaTimeModule());
        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
    }

    public void write(List dtos, String path) throws Exception {

        try (ChronicleQueue queue = SingleChronicleQueueBuilder.binary(path).rollCycle(RollCycles.DAILY).build()) {
            final ExcerptAppender appender = queue.acquireAppender();

            for (int i=0; i<dtos.size(); i++) {
                appender.writeText(mapper.writeValueAsString(dtos.get(i)));
            }
        }
    }

    public void write(Object dto, String path) throws Exception {

        try (ChronicleQueue queue = SingleChronicleQueueBuilder.binary(path).rollCycle(RollCycles.DAILY).build()) {
            final ExcerptAppender appender = queue.acquireAppender();
            appender.writeText(mapper.writeValueAsString(dto));
        }
    }


    public List readList(String path, Class aClass) throws Exception {

        List dtoList = new LinkedList<>();

        try (ChronicleQueue queue = SingleChronicleQueueBuilder.binary(path).build()) {

            final ExcerptTailer tailer = queue.createTailer();

            ChronicleMap<String, Long> indexMap = getReaderIndexMap(queue.fileAbsolutePath());

            if (indexMap.containsKey(INDEX)) {
                tailer.moveToIndex(indexMap.get(INDEX));
            }

            while (true) { // something smart ?

                String json = tailer.readText();
                if (json == null) {
                    break;
                } else {
                    dtoList.add(mapper.readValue(json, aClass));
                }
            }

            indexMap.put(INDEX, tailer.index());
            indexMap.close();
        }
        return dtoList;
    }

    public ChronicleMap<String, Long> getReaderIndexMap(String queueName) throws Exception {

        ChronicleMapBuilder<String, Long> indexReaderMap = ChronicleMapBuilder.of(String.class, Long.class)
                .name("index-reader-map")
                .averageKey(INDEX)
                .entries(1);

        ChronicleMap<String, Long> map = indexReaderMap.createPersistedTo(new File(queueName+"/reader.idx"));
        return map;
    }
}

person JPG    schedule 16.07.2018    source источник


Ответы (1)


Это основано на количестве доступных процессоров, которые, по мнению Java, у вас есть.

Если у вас есть виртуальная машина, вы можете настроить хост на большее количество процессоров.

Если у вас есть физическая машина, вы можете заменить процессор на процессор с большим количеством ядер.

Или вы можете игнорировать предупреждение.

Занятая пауза только с одним процессором, вероятно, не является хорошей идеей, поскольку она будет использовать весь имеющийся у вас процессор.

ПРИМЕЧАНИЕ. Обычно мы рекомендуем иметь как минимум 4 ядра, даже для разработки.

person Peter Lawrey    schedule 16.07.2018
comment
Спасибо за объяснение. Я скучаю по пониманию предупреждения... Теперь понятно. - person JPG; 17.07.2018
comment
@JuanPabloG проблема в том, что у вас слишком много занятых потоков и недостаточно процессора. Это может сделать машину пригодной для использования, когда вместо этого она не занята, подождите, пока код работает нормально. Не быстро, но нормально. - person Peter Lawrey; 17.07.2018
comment
еще раз спасибо. Я работаю на vmware esxi... с одним назначенным процессором. Я не понимаю предупреждение ... Хотя я имел в виду количество потоков, а не ЦП. На данный момент работает идеально. Я не ко многим сообщениям на данный момент либо. - person JPG; 18.07.2018
comment
@JuanPabloG из интереса, ты используешь Паузер? - person Peter Lawrey; 18.07.2018
comment
@PeterSmith, совсем нет. Я добавил свой код, возможно, вы захотите взглянуть, и наверняка у вас будут комментарии XD. - person JPG; 19.07.2018
comment
@JuanPabloG Я думал о том, как скрыть это сообщение, если оно не имеет к вам особого отношения. - person Peter Lawrey; 19.07.2018