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

时间:2016-10-14 05:35:32

标签: java spring spring-integration

这是适配器配置代码..

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这些消息正常运行 但是,hpux不能正常运行。

有没有人经历过同样的事情? 谢谢。

1 个答案:

答案 0 :(得分:0)

该消息是OpenHFT的Java-Thread-Affinity类。并且有一个封闭的问题似乎相同:https://github.com/OpenHFT/Java-Thread-Affinity/issues/3

Peter Lawrey的回答是:

  

由于你只有两个cpus并且你的操作系统必须在某个地方运行(该库假定cpu 0用于操作系统),所以你只有一个cpu 1可以用来绑定。正如您所看到的,它保留了第一个线程到cpu 1以及它留下的任何其他线程,因为只剩下一个cpu。如果cpus被隔离并且你拥有的cpus比关键线程更多,那么亲和力效果最好。