После
перкращения большой нагрузки на сервер (100% нагрузки на cpu в течении 1-2 часов) fastcgi скрипт почти перестает выполнять свою работу. Это выражается в том, что порядка 90% запросов к нему не дожидаются ответа от сервера.
upstream timed out (110: Connection timed out) while connecting to upstream
Проблема в том, что скрипт не "оживает" даже после 20 часов такой "работы" при этом не потребляя лишней памяти и ресурсов cpu (в сравнении со стабильной работой)
в настройках nginx есть такие строки
fastcgi_read_timeout 10s;
fastcgi_send_timeout 10s;
fastcgi_connect_timeout 10s;
а в самом скрипте
int main(void) {
streambuf * cin_streambuf = cin.rdbuf();
streambuf * cout_streambuf = cout.rdbuf();
streambuf * cerr_streambuf = cerr.rdbuf();
FCGX_Request request;
FCGX_Init();
FCGX_InitRequest(&request, 0, 0);
srand (time(NULL));
while (FCGX_Accept_r(&request) == 0) {
fcgi_streambuf cin_fcgi_streambuf(request.in);
fcgi_streambuf cout_fcgi_streambuf(request.out);
fcgi_streambuf cerr_fcgi_streambuf(request.err);
cin.rdbuf(&cin_fcgi_streambuf);
cout.rdbuf(&cout_fcgi_streambuf);
cerr.rdbuf(&cerr_fcgi_streambuf);
requestNumber++;
cout << "Pragma: no-cache\r\n";
cout << "Cache-Control: post-check=0, pre-check=0\r\n";
cout << "Cache-Control: no-store, no-cache, must-revalidate, max-age=0\r\n";
cout << "Content-type: text/html\r\n\r\n";
float dl = time(NULL) - atof(FCGX_GetParam("REQUEST_TIME", request.envp));
if(dl > REQUEST_TIMEOUT) continue; //не обрабатываем запросы ждущие слишком долго
нагрузка
память
Использование NGINX
P.S. Не силен в c++ особенно в ситуациях когда программа работает в экстремальных условиях, возможно я упускаю ту или иную проверку при создании объекта (пример: а выделилась память?)
P.P.S. ubuntu/nginx/php/mysql