有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java什么是spring集成中的AffinityThreadFactory错误消息?

这是适配器配置代码

private static final String THREAD_NAME_PREFIX = "PlainAdapterTaskScheduler";
private static final int PROCESS_SIZE = 200;
private static final int BACKLOG = 2 * 1024;
private static final long FIXED_RATE = 500;

@Value("${tcp.plain.inbound.port}")
private String inboundPort;

@Autowired
private EchoSerializer echoSerializer;

@Bean
public TcpReceivingChannelAdapter plainAdapter() {
    TcpReceivingChannelAdapter adapter = new TcpReceivingChannelAdapter();
    adapter.setConnectionFactory(plainServerFactory());
    adapter.setOutputChannel(inputWithPlain());

    return adapter;
}

@Bean
public TcpSendingMessageHandler plainHandler() {
    TcpSendingMessageHandler handler = new TcpSendingMessageHandler();
    handler.setConnectionFactory(plainServerFactory());

    return handler;
}

@Bean
public AbstractConnectionFactory plainServerFactory() {
    int port = Integer.parseInt(inboundPort);
    TcpNioServerConnectionFactory factory = new TcpNioServerConnectionFactory(port);
    factory.setBacklog(BACKLOG);
    factory.setTaskExecutor(taskSchedulerWithPlain());
    factory.setLookupHost(false);

    factory.setSerializer(echoSerializer);
    factory.setDeserializer(echoSerializer);

    // Nagle's algorithm disabled
    factory.setSoTcpNoDelay(true);

    return factory;
}

@Bean
public Executor taskSchedulerWithPlain() {
    ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
    scheduler.setPoolSize(PROCESS_SIZE);
    scheduler.setThreadFactory(plainAffinityThreadFactory());
    scheduler.setWaitForTasksToCompleteOnShutdown(true);

    return scheduler;
}

private AffinityThreadFactory plainAffinityThreadFactory() {
    return new AffinityThreadFactory(THREAD_NAME_PREFIX, SAME_CORE, DIFFERENT_SOCKET, ANY);
}

@Bean
public MessageChannel inputWithPlain() {
    return MessageChannels.queue(PROCESS_SIZE).get();
}

@Bean(name = PollerMetadata.DEFAULT_POLLER)
public PollerMetadata poller() {
    return Pollers.fixedRate(FIXED_RATE).get();
}


操作服务,以及
如果测试出现,则显示以下消息

2016-10-14 14:07:28.679 DEBUG 10716 --- [task-scheduler-7] o.s.i.endpoint.PollingConsumer           : Received no Message during the poll, returning 'false'
2016-10-14 14:07:28.682 DEBUG 10716 --- [task-scheduler-1] o.s.i.endpoint.PollingConsumer           : Received no Message during the poll, returning 'false'
2016-10-14 14:07:28.875  WARN 10716 --- [PlainAdapterTaskScheduler-2] net.openhft.affinity.LockInventory       : No reservable CPU for Thread[PlainAdapterTaskScheduler-2,5,main]
2016-10-14 14:07:28.879 DEBUG 10716 --- [PlainAdapterTaskScheduler-2] o.s.i.i.tcp.connection.TcpNioConnection  : 192.168.2.93:49531:5001:713a1d01-3fdf-4965-a457-fcc3837b2adf Reading...
2016-10-14 14:07:28.882 DEBUG 10716 --- [PlainAdapterTaskScheduler-2] o.s.i.i.tcp.connection.TcpNioConnection  : 192.168.2.93:49531:5001:713a1d01-3fdf-4965-a457-fcc3837b2adf Running an assembler
2016-10-14 14:07:28.886 DEBUG 10716 --- [PlainAdapterTaskScheduler-2] o.s.i.i.tcp.connection.TcpNioConnection  : Read 1 into raw buffer
2016-10-14 14:07:28.889  WARN 10716 --- [PlainAdapterTaskScheduler-3] net.openhft.affinity.LockInventory       : No reservable CPU for Thread[PlainAdapterTaskScheduler-3,5,main]
2016-10-14 14:07:29.014 DEBUG 10716 --- [PlainAdapterTaskScheduler-3] o.s.i.i.tcp.connection.TcpNioConnection  : 192.168.2.93:49531:5001:713a1d01-3fdf-4965-a457-fcc3837b2adf Reading...
2016-10-14 14:07:29.022 DEBUG 10716 --- [PlainAdapterTaskScheduler-3] o.s.i.i.tcp.connection.TcpNioConnection  : Read 242 into raw buffer
2016-10-14 14:07:29.024  WARN 10716 --- [PlainAdapterTaskScheduler-4] net.openhft.affinity.LockInventory       : No reservable CPU for Thread[PlainAdapterTaskScheduler-4,5,main]
2016-10-14 14:07:29.217 DEBUG 10716 --- [PlainAdapterTaskScheduler-3] o.s.i.i.tcp.connection.TcpNioConnection  : 192.168.2.93:49531:5001:713a1d01-3fdf-4965-a457-fcc3837b2adf Reading...
2016-10-14 14:07:29.220 DEBUG 10716 --- [PlainAdapterTaskScheduler-3] o.s.i.i.tcp.connection.TcpNioConnection  : Read 49 into raw buffer
2016-10-14 14:07:29.227 DEBUG 10716 --- [PlainAdapterTaskScheduler-2] c.m.c.i.serializer.EchoSerializer        : payload size is : 292
2016-10-14 14:07:29.229  WARN 10716 --- [PlainAdapterTaskScheduler-5] net.openhft.affinity.LockInventory       : No reservable CPU for Thread[PlainAdapterTaskScheduler-5,5,main]
2016-10-14 14:07:29.298 DEBUG 10716 --- [PlainAdapterTaskScheduler-2] o.s.integration.channel.QueueChannel     : preSend on channel 'inputWithPlain', message: GenericMessage [payload=byte[292], headers={ip_address=192.168.2.93, id=2ec06f67-f8e1-3645-f096-8748c566d7f3, ip_hostname=192.168.2.93, ip_tcp_remotePort=49531, ip_connectionId=192.168.2.93:49531:5001:713a1d01-3fdf-4965-a457-fcc3837b2adf, timestamp=1476421649296}]


警告信息是什么
为什么会出现此消息

[PlainAdapterTaskScheduler-2] net.openhft.affinity.LockInventory       : No reservable CPU for Thread[PlainAdapterTaskScheduler-2,5,main]


windows和linux将这些消息恢复正常运行
但是,它不能正常运行

有没有人经历过同样的事情
多谢各位


共 (1) 个答案

  1. # 1 楼答案

    消息来自OpenHFT的Java线程关联类。还有一个问题似乎是一样的:https://github.com/OpenHFT/Java-Thread-Affinity/issues/3

    彼得·劳瑞的回答是:

    Since you have only two cpus and your OS has to run somewhere (the library assumes that cpu 0 is for the OS,) so you have only one cpu 1 you can use for binding. As you can see, it reserves the first thread to cpu 1 and any additional threads it leaves as there is only one cpu left. Affinity works best if the cpus are isolated AND you have more cpus than you have critical threads.