2014-01-30 1 views
0

Я устанавливаю установку PrestaShop на сервере разработки, который является экземпляром GCE и использует Cloud SQL в качестве сервера базы данных. Все работает просто отлично, за исключением одного: когда на сайте существует длительный период бездействия, первая загрузка страницы после этого всегда дает мне эту ошибку:Первое подключение от Prestashop к Google Cloud SQL всегда сбой

Ссылка на базу данных не может быть установлена: SQLSTATE [HY000] [2003]

Если я обновляю страницу, ошибка исчезнет и больше не появится, пока я не остановлю использование сайта в течение часа или около того. Похоже, что экземпляр базы данных переходит в спящий режим или что-то в этом роде.

Причина, по которой я упомянул Prestashop, заключается в том, что я никогда не получаю эту ошибку при использовании Adminer или подключении к базе данных от клиента консоли mysql.

+0

Я добавил хрон, проверяющий сайт через Wget каждые 5 минут, но это, кажется, не поможет. – Damir

ответ

2

С моделью выставления счетов за использование экземпляры свернуты после 15-минутного таймаута, чтобы сэкономить деньги. Затем они занимают несколько секунд, чтобы их можно было развернуть при следующем доступе. Возможно, Prestashop таймизирует эти первые запросы (хотя у меня нет опыта работы с этим приложением).

Попробуйте изменить свой экземпляр пакета биллинг, который имеет 12-часовой тайм-аут, чтобы увидеть, если это помогает

https://developers.google.com/cloud-sql/faq#how_usage_calculated

1

Согласно GCE documentation,

Once a connection has been established with an instance, traffic is permitted in both directions over that connection, until the connection times out after 10 minutes of inactivity

Я подозреваю, что может быть причина. Чтобы обойти это, вы можете попробовать lower the tcp keepalive time.

1

См здесь: https://cloud.google.com/sql/docs/compute-engine-access

To keep long-lived unused connections alive, you can set the TCP keepalive. The following commands set the TCP keepalive value to one minute and make the configuration permanent across instance reboots.

# Display the current tcp_keepalive_time value. 
$ cat /proc/sys/net/ipv4/tcp_keepalive_time 

# Set tcp_keepalive_time to 60 seconds and make it permanent across reboots. 
$ echo 'net.ipv4.tcp_keepalive_time = 60' | sudo tee -a /etc/sysctl.conf 

# Apply the change. 
$ sudo /sbin/sysctl --load=/etc/sysctl.conf 

# Display the tcp_keepalive_time value to verify the change was applied. 
$ cat /proc/sys/net/ipv4/tcp_keepalive_time 

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

  • Нет связанных вопросов^_^