2013-09-13 5 views
1

У меня проблема с производительностью, и я не знаю, откуда она взялась.Как оптимизировать производительность с помощью appstats

Разрыв между createLogoutURL и первым запросом датастора огромен ... его между следующим кодом отрывком:

loginInfo.setLogoutUrl(userService.createLogoutURL(requestUri)); 
... 
ch.zhaw.ams.server.auth.user.User userAms = DatabaseHelper.findByParama(user.getEmail(), "emailAddress", 
        "String", ch.zhaw.ams.server.auth.user.User.class); 

enter image description here

@Override 
public GoogleLoginInfo login(String requestUri) { 
    UserService userService = UserServiceFactory.getUserService(); 
    User user = userService.getCurrentUser(); 

    GoogleLoginInfo loginInfo = new GoogleLoginInfo(); 

    if (user != null) { 
     loginInfo.setLoggedIn(true); 
     loginInfo.setEmailAddress(user.getEmail()); 
     loginInfo.setNickname(user.getNickname()); 
     loginInfo.setLogoutUrl(userService.createLogoutURL(requestUri)); 
     loginInfo.setIsGoogleLogin(true); 

     ch.zhaw.ams.server.auth.user.User userAms = DatabaseHelper.findByParama(user.getEmail(), "emailAddress", 
       "String", ch.zhaw.ams.server.auth.user.User.class); 
     if (userAms != null) { 
      loginInfo.setFirstname(userAms.getFirstName()); 
      loginInfo.setLastname(userAms.getLastName()); 
     } 

     // Set Memcache 
     try { 
      SessionCache.setupCache(user.getEmail()); 
      loginInfo.setIsCached(true); 
     } catch (CacheException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      loginInfo.setIsCached(false); 
     } 

    } else { 
     loginInfo.setLoggedIn(false); 
     loginInfo.setLoginUrl(userService.createLoginURL(requestUri)); 
    } 
    return loginInfo; 
} 

ли кто-нибудь имеет представление о том, почему его так медленно?

+0

Является ли движок google-приложения по-прежнему запускать новый JVM за запрос (и останавливать его при завершении) или это просто слухи? –

+0

Я не знаю ... – Sam

+0

Если это так, значит, вы платите стоимость запуска, стоимость разогрева кода по каждому запросу. Должен быть закон снова такой неэффективности ИМХО. Возможно, вам стоит рассмотреть альтернативный сервер приложений, все остальное будет намного быстрее. Столько 100 раз быстрее. –

ответ

0

С положительной стороны, Appstats уже сузили его до трех линий для вас:

loginInfo.setLogoutUrl(userService.createLogoutURL(requestUri)); 

loginInfo.setIsGoogleLogin(true); 

ch.zhaw.ams.server.auth.user.User userAms = DatabaseHelper.findByParama(user.getEmail(), "emailAddress", 
      "String", ch.zhaw.ams.server.auth.user.User.class) 

Вы, вероятно, может бегать вокруг и попытаться выяснить, какие строки вызывает задержку. Лучше всего предположить, что это первый раз, когда вы загружаете класс ch.zhaw.ams.server.auth.user.User.class. Этот класс может вызвать загрузку других классов. Длительная задержка, которую вы видите, может быть просто временем загрузки класса.

Возможно, вы можете добавить обработчик запуска для загрузки некоторых из этих классов, поэтому он, надеюсь, появится редко, но вы увидите много жалоб на время загрузки класса Java в GAE. Это не проблема, которая может быть полностью решена на GAE.

Смежные вопросы