Очень простой код Java в doGet () сервлет получает больше, чем секунда процессорного времени на GAE. Я прочитал некоторую связанную с квотой документацию, и по-видимому я не делаю ничего плохого.
//Request the user Agent info
String userAgent = req.getHeader("User-Agent");
Я хотел знать то, что использовало ЦП больше всего, я использую рекомендацию справки Google.
//The two lines below will get the CPU before requesting User-Agent Information
QuotaService qs = QuotaServiceFactory.getQuotaService();
long start = qs.getCpuTimeInMegaCycles();
//Request the user Agent info
String userAgent = req.getHeader("User-Agent");
//The three lines below will get the CPU after requesting User-Agent Information
// and informed it to the application log.
long end = qs.getCpuTimeInMegaCycles();
double cpuSeconds = qs.convertMegacyclesToCpuSeconds(end - start);
log.warning("CPU Seconds on geting User Agent: " + cpuSeconds);
Единственная вещь, которую код выше говорит мне, состоит в том, что осмотр заголовка будет использовать больше, чем секунда (1 000 мс) процессорного времени, которое для Google является предупреждением на панели журнала. Это, кажется, очень простой запрос и все еще использует больше, чем секунда CPU.
Что я пропускаю?
Ниже изображения журналов для общих развлечений.
Я отправляю полный код, в пользу всех.
@SuppressWarnings("serial")
public class R2CComingSoonSiteServlet extends HttpServlet {
private static final Logger log = Logger.getLogger(R2CComingSoonSiteServlet.class.getName());
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
//The two lines below will get the CPU before requesting User-Agent Information
QuotaService qs = QuotaServiceFactory.getQuotaService();
long start = qs.getCpuTimeInMegaCycles();
//Request the user Agent info
String userAgent = req.getHeader("User-Agent");
//The three lines below will get the CPU after requesting User-Agent Information
// and informed it to the application log.
long end = qs.getCpuTimeInMegaCycles();
double cpuSeconds = qs.convertMegacyclesToCpuSeconds(end - start);
log.warning("CPU Seconds on geting User Agent: " + cpuSeconds);
userAgent = userAgent.toLowerCase();
if(userAgent.contains("iphone"))
resp.sendRedirect("/mobIndex.html");
else
resp.sendRedirect("/index.html");} }
В App Engine больше нет поминутных квот. Все сообщения, относящиеся к ним, устарели. Если вы хотите лучше профилировать использование процессора, вы можете попробовать недавно выпущенную appstats для Java .
Ваши журналы показывают, что он работает медленно только иногда.
Неужели создание вашего объекта сервлета действительно медленное?
Единственное, что мне говорит приведенный выше код, - это то, что для проверки заголовка потребуется более секунды (1000 мс) времени процессора, что для Google является предупреждение на панели журнала. Это кажется очень простым запросом, и он по-прежнему использует более секунды процессора.
Это также происходит без вызовов API квот?