Как я могу отладить паузы при выполнении в производственной среде App Engine?
Просматривая графики Appstats для моего Google App Engine/Java-приложения, я иногда вижу разрывы, казалось бы, необъяснимого времени между RPC. На прикрепленном снимке экрана между двумя вызовами MemcacheService.get из цикла for существует почти 2 секунды. Такое поведение не появляется, когда я запускаю код локально. Как я могу выяснить причину таких аномалий, когда мой код работает в облаке App Engine?
Очевидно, поэтому я не буду публиковать изображения, поэтому вот ссылка на график: http://i.imgur.com/bbCXr.jpg
2 ответа
Хотя 2 секунды - аномально длительное время, такие необъяснимые пропуски обычно сводятся к одной из двух причин: коду приложения или планированию.
Поскольку кажется маловероятным, что вы выполняете обработку двух секунд между этими двумя вызовами, наиболее вероятным ответом является планирование: ваше приложение исчерпало свой временной интервал, а ОС запланировала выполнение других задач на некоторое время.
Помните, что App Engine - это виртуальный хостинг. Хотя это не похоже на перепроданный виртуальный хостинг VPS, вы все еще находитесь на машине с другими сайтами. Если код других сайтов захватывает некоторые ресурсы, возможно, это повлияет на производительность ваших приложений. Я не до конца осознаю, какие ресурсы App Engine чувствительны, и кто-то вроде @Nick-Johnson сможет рассказать вам об этом. Принцип работы App Engine предотвращает большинство распространенных проблем. Когда я смотрю на этот график, мне кажется, что другое приложение схватило машину за разрыв.