Ho un'applicazione multithread che ha una buona scalabilità all'inizio, ma in esecuzione su un server 16-cpu, una volta superato 5 o 6 thread hardware le prestazioni si disattivano. I sospetto che il collo di bottiglia circonda uno dei metodi sincronizzati. Tuttavia, devo essere sicuro che sia il metodo colpevole prima di iniziare a immergermi nel codice e provare a sostituire l'algoritmo con uno non bloccante.Profiling Java: scopri dove i thread trascorrono del tempo bloccati
esecuzione Java con l'argomento -Xprof mi dice che, come mi aspettavo, i fili stanno spendendo la maggior parte del loro tempo bloccati. C'è un modo in cui posso suddividerlo in quanto tempo spendono bloccato con un particolare metodo?