Dopo che kill -9 process non scompare e la port è ancora legata

Abbiamo un'applicazione di server Java in esecuzione su Mac OS X.

Occasionalmente questa applicazione è diventata intriggers e abbiamo ricorso a ucciderlo con kill -9 . Tuttavia, il process non scompare; sembra ancora ps , con parentesi intorno al suo nome e un punto interrogativo nella colonna STAT:

  • Come evitare lenta rispondere a Tomcat per rendere Apache lento a rispondere?
  • Perché non è mai usato "chroot" su Mac OS X?
  • File batch per disinstallare tutte le versioni di Sun Java?
  • nginx: nessun permesso di bind la port 8090 ma si lega a 80 e 8080
  • Improvvisamente errore = 'Imansible allocare memory' (errno = 12)
  • Supporto del volume NFS sul server Linux Ubuntu dal client MacOS
  •  $ ps u -p 776 USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND camadmin 776 0.0 0.0 0 0 ?? ?E 5:12PM 0:00.00 (java) 

    Inoltre, la port utilizzata dal server è ancora vincasting:

     $ netstat -na | grep 9902 tcp4 0 0 *.9902 *.* LISTEN 

    anche se non è visibile a lsof :

     $ sudo lsof -P -i tcp | grep 9902 $ 

    Con la port ancora vincasting, non è ansible riavviare l'applicazione server. A corto di riavviare la macchina, cosa può essere fatto per get la port a rilasciare e get questo process veramente ucciso?

    2 Solutions collect form web for “Dopo che kill -9 process non scompare e la port è ancora legata”

    Il tuo process sta aspettando qualcosa prima che possa uscire.

    Forse una chiamata di sistema. Provare ad accedere a un file che è stato smontato è un esempio comune di questo o una condivisione di networking non disponibile.

    C'è un process genitore o figlio che deve anche essere ucciso?

    Non sono un utente MacOS, ma su Linux ps wwauxf | less ps wwauxf | less è utile per sfogliare la gerarchia dei processi per cercare i processi genitori e figlio. strace -p [pid] potrebbe dirti qualcosa di utile per una chiamata di sistema corrente che non è ancora tornata.

    EDIT: il tuo process è stato avviato lanciando? Sembra che alcune persone abbiano problemi con questo (ad esempio, come uccidere un process "in output" in OS X (state = E) ) e come suggerito in precedenza, probabilmente dovrai uccidere il process padre, che in questo caso viene lanciato. Potrebbe essere che non è meglio di un riavvio.

    Probabilmente launchd mantiene una connessione con la tua app per riavviarlo se muore, ma non è tutto qui utile.

    Un kill -15 funziona meglio? cioè prima di entrare nello stato che descrivi, non come una via d'output.

    Lo stato E sembra significare che il process sta uscendo. Ma il tuo process è fondamentalmente uno zombie che non esce mai. Tutto in linea che ho trovato dimostra che c'è poco che puoi fare diverso dal riavvio, ad esempio Come uccidere un process di "output" in OS X (state = E) . Se non si desidera riavviare il server OSX a causa di altri servizi impattati, è ansible considerare (come soluzioni alternative):

    • Migrare solo questo servizio java a una macchina OSX separata che è ansible riavviare each volta che necessario con un impatto minimo

    • Se si dispone di abbastanza RAM su questo server, è ansible eseguire una VM e eseguire questo servizio dall'interno del VM. Se il process non risponde e non verrà ucciso, potresti semplicemente rimbalzare la VM e non influire sul sistema operativo host. Dal momento che sembra Java, non devi necessariamente fare il guest OS VM OSX. Forse provalo in un Ubuntu o in CentOS VM? Potresti scaricare uno di essi come un apparecchio (file OVA / VDI) e farlo funzionare in VirtualBox in less di 30 minuti. Non può nemless avere la questione zombie su un Linux VM. Vedi http://virtualboximages.com/Free.VirtualBox.VDI.Downloads

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.