Voglio ottenere l'ID di processo di una discussione per vedere quanta memoria ci vuole.Un thread Java ha il proprio ID di processo?
risposta
Dipende molto dal sistema operativo e da come gestisce i thread. In teoria, dipende anche da come JVM implementa i thread, ma tutti i JVM moderni li implementano come thread nativi.
Su Linux ogni thread
sarà
utilizzato per ottenere il proprio ID di processo, ma la maggior parte strumenti di nascondere tutto, ma un thread per ogni processo (cioè di solito non li vedi a meno che non esplicitamente chiedere loro, ps
usa la bandiera -m
per esempio). Questo è causato dal fatto che il kernel di Linux non fa davvero molta differenza tra thread e attività.
Edit: come ho appena imparato questo non è più necessariamente il caso: si possibile creare un thread con lo stesso identico PID come il genitore, nel qual caso i fili saranno contraddistinti da diversi ID di filo .
Tuttavia dal momento che un filo condivide la sua memoria con tutti gli altri thread nello stesso processo, questa non aiutare a scoprire "la quantità di memoria un filo prende", dal momento che tutte le discussioni in un processo utilizzeranno la la stessa quantità esatta (e tutti usano lo stesso, quindi la memoria reale utilizzata è shown_memory_use
e non shown_memory_user * number_of_threads
).
Se "un thread condivide la sua memoria con tutti gli altri thread nello stesso processo" come può avere un ID di processo distinto? sì. – EJP
Questo è solo il modo in cui Linux funziona. Un ID di processo separato non implica che la memoria sia separata, anche se un normale processo condivide la memoria con il genitore direttamente dopo averlo forato (copia-su-scrittura però). È possibile creare thread che condividono lo stesso PID (clone (2) con CLONE_THREAD), ma il modo più vecchio di farlo era di assegnare a ciascun thread un PID a sé stante. Non sono sicuro del tipo di clone che le JVM di oggi usano però. –
Grazie per la risposta! Questo è esattamente ciò che intendevo :) –
Come indica il nome, PID indica ID processo. Ogni processo può generare più thread, che condividono tutti lo stesso PID. Sei sicuro di non voler dire ID filo?
I thread non hanno PID, i processi lo fanno. In quanto tale, ciò che stai chiedendo non è possibile. Non esiste anche un modo affidabile per recuperare il PID da un processo Java (sebbene la prima parte del valore restituito da ManagementFactory.getRuntimeMXBean().getName()
di solito sia il PID).
Una funzionalità di thread è che condivide l'heap con tutti gli altri thread. Ciò significa che qualsiasi thread può potenzialmente utilizzare quasi tutta la memoria del processo. L'unica cosa a cui un thread non ha accesso è lo stack o le variabili locali di un altro thread.
Come tale non è utile provare a determinare la quantità di memoria utilizzata da un singolo thread. Invece può essere utile determinare la quantità di memoria utilizzata da una struttura di dati. (Anche se questo può avere difficoltà simili)
Vale la pena notare che la memoria principale è relativamente economica. La tua situazione potrebbe essere diversa, ma un tipico nuovo server con 24 GB può costare solo £ 1K. È possibile acquistare un PC da 96 GB per circa £ 2K. A volte non vale la pena preoccuparsi di quanta memoria si sta usando fino a quando non si sa che è un problema.
- 1. Ogni thread ha il proprio stack?
- 2. Trova tutti i thread di un processo definito ID processo
- 3. Ogni thread gestito ha il proprio thread nativo corrispondente?
- 4. Relazione tra ID thread e ID processo
- 5. Ogni processo ha il proprio stdin, stdout e stderr?
- 6. Come ottenere il numero di thread in un processo Java
- 7. Will ha ucciso il mutex di processo/rilascio thread?
- 8. Ottieni un ID lavoratore/thread/processo/richiesta univoco in PHP
- 9. @Id @GeneratedValue ma impostare proprio valore ID
- 10. Eseguire il processo in background in thread diversi in Java
- 11. Il kernel di Linux ha il proprio contesto SSE/AVX?
- 12. Come gestire il thread principale del processo
- 13. Utilizzo della memoria di thread o processo in Java
- 14. Determinare se esiste un processo dal suo ID processo
- 15. Ogni core ha il proprio set privato di registri?
- 16. Java identificare un'eccezione proprio
- 17. Trovare un processo ID per nome
- 18. Gli ID filo e processo sono univoci?
- 19. Un processo che serve il pool di applicazioni 'X' ha subito un errore di comunicazione fatale con il servizio Attivazione processo di Windows
- 20. Il processo CLOCK_MONOTONIC (o thread) è specifico?
- 21. JDI Thread Evaluations ha riscontrato un problema
- 22. Ciascun pool php-fpm ha il proprio pool di memoria?
- 23. Il thread o il processo apply_async di sedano?
- 24. Eliminazione della conferma "buffer ha processo in corso" quando il processo è un processo flymake
- 25. ID thread in Qt
- 26. Linux: rilevare in fase di esecuzione che un processo ha più thread
- 27. Win32: Come ottenere il processo/thread che possiede un mutex?
- 28. Come ottenere un ID thread del kernel?
- 29. Come posso ottenere lo stdin di un processo con un id di processo?
- 30. In un programma Java multithread, ogni thread ha la propria copia di System.out?
Ok, grazie (: puoi postare questo come risposta in modo che io possa accettarlo;) –
Sono sicuro, sì. (; La mia idea era di verificare l'utilizzo della RAM di un singolo thread tramite l'ID del processo. –
In tal caso, è necessario eseguire ciò che il thread fa in un processo separato.In genere, questo è più un problema che un valore. può essere più semplice eseguire la tua applicazione con un profiler e associare le strutture più grandi a una discussione usando il tuo giudizio –