Как вы сказали, профилирование распределенного процесса сложнее, чем профилирование одного процесса JVM, но есть способы его достижения.
Вы можете использовать выборку в качестве метода профилирования потоков. Добавьте агента java к исполнителям, которые будут захватывать трассировки стека, а затем агрегируют по этим трассировкам стека, чтобы узнать, какие методы использует ваше приложение в большинстве случаев.
Например, вы можете использовать statsd- jvm-profiler java agent и настроить его для отправки трассировки стека в InfluxDB , а затем скомпилировать их с помощью пламенных графов .
информацию, проверить мое сообщение о профилировании приложений Spark: https://www.paypal-engineering.com/2016/09/08/spark-in-flames-profiling-spark-applications-using-flame-graphs/
Apache Ленг свободного городского населения ReflectionToStringBuilder делает это для Вас.
import org.apache.commons.lang3.builder.ReflectionToStringBuilder
// your code goes here
public String toString() {
return ReflectionToStringBuilder.toString(this);
}
Вт/отражение, поскольку я не знал об апачской библиотеке:
(знать, что, если Вы делаете это, необходимо будет, вероятно, иметь дело с подобъектами и удостовериться, что они печатают правильно - в частности, массивы не покажут Вам ничего полезного)
@Override
public String toString()
{
StringBuilder b = new StringBuilder("[");
for (Field f : getClass().getFields())
{
if (!isStaticField(f))
{
try
{
b.append(f.getName() + "=" + f.get(this) + " ");
} catch (IllegalAccessException e)
{
// pass, don't print
}
}
}
b.append(']');
return b.toString();
}
private boolean isStaticField(Field f)
{
return Modifier.isStatic(f.getModifiers());
}
Не отражение, но я взглянул на генерацию toString метода (наряду с, равняется/хэш-код) как постшаг компиляции с помощью управления байт-кодом. Результаты были смешаны.
Вот Netbeans, эквивалентный ответу Olivier; умный-codegen плагин для Netbeans.
При использовании Eclipse можно также взглянуть на генератор JUtils toString , который делает это статически (генерирующий метод в исходном коде).