这是适配器配置代码..
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不能正常运行。
有没有人经历过同样的事情? 谢谢。
答案 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比关键线程更多,那么亲和力效果最好。