Почему мое приложение Flask возвращает 500 ошибок сервера при развертывании с новым файлом в памяти? - PullRequest
2 голосов
/ 19 апреля 2019

Я развертываю новую версию своего приложения Flask в Google App Engine (GAE) и получаю сообщение об ошибке сервера 500 до того, как домашняя страница даже загрузится.Единственная разница в этой новой версии заключается в том, что я загружаю дополнительный 26MB файл в память, используя декоратор @app.before_first_request.В предыдущей рабочей версии я загружал файлы таким же образом, который занимал не более 20 МБ.

Перед загрузкой в ​​этом файле мое приложение работало хорошо.

IЯ попытался обновить мой файл app.yaml, чтобы увеличить размер компьютера, добавив в него следующие строки:

resources:
  cpu: 2
  memory_gb: 2.3

Это мой файл app.yaml:

runtime: python27
api_version: 1
threadsafe: true

handlers:
- url: /static
  static_dir: static
- url: /.*
  script: main.app

libraries:
- name: ssl
  version: latest
- name: numpy
  version: "1.6.1"

resources:
  cpu: 2
  memory_gb: 2.3

ThisВот как я загружаю файлы в память в main.py:

def get_gcloud_data(fname):
    """Retrieve file from GCS.
    """
    base_link = 'http://fake_base_link/'
    return pickle.loads(requests.get(base_link+fname).content)

@app.before_first_request
def startup():
    global fake_var_name

    fake_var_name = np.array(get_gcloud_data('pickled_file.p'))

Я не ожидал, что этот дополнительный файл вызовет такие проблемы.Я загружаю файлы в память неправильно (я должен делать это вообще?)?Почему я получаю эту новую ошибку 500?

1 Ответ

2 голосов
/ 20 апреля 2019

Вы смешиваете конфигурации гибкой среды (в частности, resources) в файл app.yaml стандартной среды - они игнорируются.Возможно представляет интерес: Как определить, относится ли страница документации Google App Engine к стандарту 1-го / 2-го поколения или к гибкой среде

Чтобы увеличить доступную память (и мощность ЦП) вВ стандартной среде вам нужно выбрать другой instance_class (см. его в Среда выполнения и элементы приложения ):

instance_class

Необязательный. класс экземпляра для этой услуги.

Доступны следующие значения в зависимости от масштабирования вашей службы :

Автоматическое масштабирование

F1, F2, F4, F4_1G

По умолчанию : F1 назначается, если вы не указали класс экземпляра вместе с автоматическое масштабирование элемент.

Базовое и ручное масштабирование

B1, B2, B4, B4_1G, B8

По умолчанию: B2 назначается, если вы не указали класс экземпляра вместе с элементом basic_scaling или manual_scaling .

Примечание : Если instance_class установлен на F2 или выше, вы можете оптимизировать свои экземпляры, установив для max_concurrent_requests значение больше 10, что является значением по умолчанию.Чтобы найти оптимальное значение, постепенно увеличивайте его и следите за производительностью вашего приложения.

Я вижу, вы ищете 2,3 ГБ или ОЗУ, но максимальная поддерживаемая классами экземпляров стандартной среды составляет всего 1 ГБ.,Если вам действительно нужно больше 1G, вам придется переключиться на гибкую среду.Но я подозреваю, что может на самом деле не так уж много нужно, так как приложение работало нормально до изменения с тем, что должно было быть классом экземпляра по умолчанию (т.е. F1 с 128M).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...