2017-02-13 4 views
0
Thread 10296: (state = IN_NATIVE) 
- sun.nio.ch.Net.connect0(boolean, java.io.FileDescriptor, java.net.InetAddress, int) @bci=0 (Interpreted frame) 
- sun.nio.ch.Net.connect(java.net.ProtocolFamily, java.io.FileDescriptor, java.net.InetAddress, int) @bci=25, line=465 (Interpreted frame) 
- sun.nio.ch.Net.connect(java.io.FileDescriptor, java.net.InetAddress, int) @bci=6, line=457 (Interpreted frame) 
- sun.nio.ch.SocketChannelImpl.connect(java.net.SocketAddress) @bci=225, line=670 (Interpreted frame) 
- kafka.network.BlockingChannel.connect() @bci=135 (Interpreted frame) 
- kafka.producer.SyncProducer.connect() @bci=21 (Interpreted frame) 
- kafka.producer.SyncProducer.getOrMakeConnection() @bci=11 (Interpreted frame) 
- kafka.producer.SyncProducer.kafka$producer$SyncProducer$$doSend(kafka.api.RequestOrResponse, boolean) @bci=13 (Interpreted frame) 
- kafka.producer.SyncProducer.send(kafka.api.TopicMetadataRequest) @bci=6 (Interpreted frame) 
- kafka.client.ClientUtils$.fetchTopicMetadata(scala.collection.Set, scala.collection.Seq, kafka.producer.ProducerConfig, int, kafka.auth.KafkaUser) @bci=189 (Interpreted frame) 
- kafka.producer.BrokerPartitionInfo.updateInfo(scala.collection.immutable.Set, int) @bci=24 (Interpreted frame) 
- kafka.producer.async.DefaultEventHandler$$anonfun$handle$2.apply$mcV$sp() @bci=54 (Interpreted frame) 
- kafka.utils.Utils$.swallow(scala.Function2, scala.Function0) @bci=1 (Interpreted frame) 
- kafka.utils.Logging$class.swallowError(kafka.utils.Logging, scala.Function0) @bci=12 (Interpreted frame) 
- kafka.utils.Utils$.swallowError(scala.Function0) @bci=2 (Interpreted frame) 
- kafka.producer.async.DefaultEventHandler.handle(scala.collection.Seq) @bci=269 (Interpreted frame) 
- kafka.producer.Producer.send(scala.collection.Seq) @bci=45 (Interpreted frame) 
- kafka.javaapi.producer.Producer.send(kafka.producer.KeyedMessage) @bci=21 (Interpreted frame) 
- com.tmri.cld.impl.kafka.SjKafkaClientUtil.sendMessage(java.lang.String, java.lang.String, byte[]) @bci=40, line=141 (Interpreted frame) 
- com.tmri.stream.handle.thread.w.SendLogDataThreadW.run() @bci=356, line=78 (Interpreted frame) 
- java.util.concurrent.ThreadPoolExecutor.runWorker(java.util.concurrent.ThreadPoolExecutor$Worker) @bci=95, line=1145 (Interpreted frame) 
- java.util.concurrent.ThreadPoolExecutor$Worker.run() @bci=5, line=615 (Interpreted frame) 
- java.lang.Thread.run() @bci=11, line=745 (Interpreted frame) 

Как показано выше, я использую jstack для получения вывода и для отладки, у меня есть googled и до сих пор не получил ясного ответа, может ли кто-нибудь сказать мне, что означает IN_NATIVE статус в файле вывода jstack?Что означает IN_NATIVE в jstack файле?

+0

Это означает, что исключение произошло в собственном коде. –

+1

Возможный дубликат [потоков Java: интерпретация состояний потоков запущенной JVM] (http://stackoverflow.com/questions/1827543/java-threads-interpreting-thread-states-of-a-running-jvm) – Seelenvirtuose

ответ

2

В какой-то момент большинство кодов должно взаимодействовать с операционной системой и физическим оборудованием. Java делает это с помощью собственного кода, а состояние JStack IN_NATIVE отражает это - он запускает системный «родной» код, а не код Java (например, для записи данных в файл). См. Ответы на this question для определения собственного кода.

Состояния вы видите VM зависит, но, скорее всего, вы работаете что-то с Hotspot или аналогичный (OpenJDK, Oracle JDK и т.д.), поэтому в following definitions следует проводить:

  • UNINITIALIZED - никогда не должны бывает (отсутствует инициализация)
  • NEW - Просто запуск, то есть в процессе инициализации
  • IN_NATIVE - Запуск в родном коде
  • IN_NATIVE_TRANS - соответствующее переходное состояние
  • IN_VM - Запуск в VM
  • IN_VM_TRANS - корреспондент переходного состояния
  • IN_JAVA - Запуск в Java или в тупиковой коде
  • BLOCKED - Заблокировано vm
  • BLOCKED_TRANS - Соответствующее переходное состояние

Суффикс _TRANS используется для обозначения темы переходят между состояниями. Обратите внимание, что состояния IN_JAVA_TRANS и NEW_TRANS не используются, поэтому я исключил их из приведенного выше списка.