Гость
Форумы / Вопросы по IT / Помогите потюнить сарвер / 14 сообщений из 14, страница 1 из 1
10.09.2017, 20:02
    #245160
Конякула
Участник
[игнорирует гостей]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шут - адвокат разума
Помогите потюнить сарвер
Взял сервак на vds.sh. Всё в целом хорошо, но ответ от сервера около 5-ти секунд. Это очень много.

При этом ресурсы не заняты на 100%.

Помогите. Чего посмотреть? Где поковырять?
...
Рейтинг: 0 / 0
10.09.2017, 20:08
    #245161
Конякула
Участник
[игнорирует гостей]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шут - адвокат разума
Помогите потюнить сарвер
В Mysql включил логирование длительных запросов и запросов без индексов. В логе ничего подозрительного нету. Всё запросов более 0,002 секунды нет ни одного. Не пойму где засада.
...
Рейтинг: 0 / 0
10.09.2017, 20:27
    #245163
Программизд 02
Администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гидроцефалы всех стран соединяйтесь!
Помогите потюнить сарвер
Конякула,

Я как то написал минипрофайлер
Код: PHP
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
<?php
//-------------------------------------------------------------------
// class Profiler
//-------------------------------------------------------------------
class Profiler
{
  //-----------------------------------------------------------------
  static $inst_object;
  //-----------------------------------------------------------------
  /**
  * @returns Profiler
  */
  static function instance()
  {
    if(!empty(self::$inst_object)) return self::$inst_object;

    self::$inst_object = new Profiler();

    return self::$inst_object;
  } // instance
  //-----------------------------------------------------------------
  static function log_point($msg)
  {
    static $profile_time;

    $profiler = self::instance();
    if(empty($profiler)) return;

    $log_file = $profiler->get_log_file();
    if(!$log_file) return;

    if(empty($profile_time)) $profile_time = microtime(true);

    $duration = microtime(true) - $profile_time;

    $_SESSION[S_CONTEXT]["current_profile_statistics"][$msg][] = $duration;

    $msg = substr(sprintf("%-60s", $msg), 0, 60) . "    " .
           sprintf("%8s", number_format($duration, 3, ".", "")) . " seconds";

    if((!file_exists($log_file) && is_writable(dirname($log_file))) || is_writable($log_file))
    {
      error_log($msg . "\r\n", 3, $log_file);
    }

    $profile_time = microtime(true);
  } // log_point
  //-----------------------------------------------------------------
  function get_log_file($average = false)
  {
    $path = __FILE__;
    $basename = basename(__FILE__);
    $path = str_replace("include\\_generic\\$basename", "", $path);
    $path = str_replace("include/_generic/$basename", "", $path);

    if(empty($_SESSION[S_CONTEXT]["current_profile_file"]))
    {
      if(!file_exists($path . "log/profiles") &&
         !@mkdir($path . "log/profiles"))
      {
        return false;
      }

      if(!file_exists($path . "log/profiles/" . session_id()) &&
         !@mkdir($path . "log/profiles/" . session_id()))
      {
        return false;
      }

      if($average)
      {
        return $path . "log/profiles/" . session_id() . "/average.log";
      }

      $_SESSION[S_CONTEXT]["current_profile_file"] = $path . "log/profiles/" . session_id() . "/" . date("H.i.s") . ".log";
    }

    return $_SESSION[S_CONTEXT]["current_profile_file"];
  } // get_log_file
  //-----------------------------------------------------------------
  function __destruct()
  {
    unset($_SESSION[S_CONTEXT]["current_profile_file"]);

    if(empty($_SESSION[S_CONTEXT]["current_profile_statistics"])) return;

    $log_file = $this->get_log_file(true);
    if(!$log_file) return;

    if(file_exists($log_file)) @unlink($log_file);

    foreach($_SESSION[S_CONTEXT]["current_profile_statistics"] as $msg => $durations)
    {
      $duration = 0;

      if(count($durations) > 0) $duration = array_sum($durations)/count($durations);

      $msg = substr(sprintf("%-60s", $msg), 0, 60) . "    " .
             sprintf("%8s", number_format($duration, 3, ".", "")) . " seconds";

      if((!file_exists($log_file) && is_writable(dirname($log_file))) || is_writable($log_file))
      {
        error_log($msg . "\r\n", 3, $log_file);
      }
    }
  } // __destruct
  //--------------------------------------------------------------------
} // Profiler
//-------------------------------------------------------------------
?>
Использование:

Вызываешь межу различными кусками кода
Код: PHP
1.
2.
3.
4.
5.
6.
7.
Profiler::log_point("start");
...
Profiler::log_point("before operation 1");
...
Profiler::log_point("operation 1 done");
...
Profiler::log_point("end");
В лог файле получаешь расклад сколкьо выполнялся каждый кусок. Ну и там уже будет видна причина.
...
Рейтинг: 0 / 0
10.09.2017, 20:28
    #245164
Программизд 02
Администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гидроцефалы всех стран соединяйтесь!
Помогите потюнить сарвер
Там правда пути под мой проект. Возможно тебе их нужно будет подкорректировать. Но думаю идея понятна.

PS
Щадержки могут быть не из за времени выполнения а из за ожидания окончания блокировок.
...
Рейтинг: 0 / 0
10.09.2017, 20:50
    #245173
Конякула
Участник
[игнорирует гостей]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шут - адвокат разума
Помогите потюнить сарвер
Программизд 02 
Там правда пути под мой проект. Возможно тебе их нужно будет подкорректировать. Но думаю идея понятна.

PS
Щадержки могут быть не из за времени выполнения а из за ожидания окончания блокировок.
Деда, у тебя же на их же серверах сайт. Как ты добился ответа в 0.2 секунды?
...
Рейтинг: 0 / 0
10.09.2017, 20:51
    #245175
Конякула
Участник
[игнорирует гостей]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шут - адвокат разума
Помогите потюнить сарвер
У меня тоже есть профайлер. Попозже погоняю. Но странно, что на прошлом хостинге всё работало существенно быстрее. Код я не менял, значит в настройках дело.
...
Рейтинг: 0 / 0
10.09.2017, 20:51
    #245176
Конякула
Участник
[игнорирует гостей]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шут - адвокат разума
Помогите потюнить сарвер
При чём не просто быстрее, а в 10 раз быстрее. 300-500 миллисекунд против 5 секунд.
...
Рейтинг: 0 / 0
10.09.2017, 20:53
    #245177
Программизд 02
Администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гидроцефалы всех стран соединяйтесь!
Помогите потюнить сарвер
Конякула 
У меня тоже есть профайлер. Попозже погоняю. Но странно, что на прошлом хостинге всё работало существенно быстрее. Код я не менял, значит в настройках дело.
Мой тоже работал быстрее. Здесь скорее всего слабоваты процессоры.

Мне помогло:

- оптимизация запросов
- исключил изыбточное вычисление новых. Вычисляю один раз на все случаи и откладываю в глобальную переменную. Далее беру из нее.
- увеличил оперативку
- добавил ядро
- включил opcache
...
Рейтинг: 0 / 0
10.09.2017, 20:54
    #245178
Программизд 02
Администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гидроцефалы всех стран соединяйтесь!
Помогите потюнить сарвер
Мои настройки mysql 7.9
Код
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
[mysqld]
innodb_buffer_pool_size = 512M
innodb_log_file_size = 512M
innodb_flush_log_at_trx_commit = 2 # may change to 2 or 0
innodb_flush_method = O_DIRECT
innodb_io_capacity_max=6000
innodb_io_capacity=3000

max_connections=2000

max_allowed_packet=24M
max_connect_errors=100
open_files_limit=4161
sort_buffer_size=512M

query_cache_size=32M
thread_cache_size=0

ft_min_word_len=3
back_log=450
open_files_limit=10000
key_buffer_size=128M
read_buffer_size=512M
read_rnd_buffer_size=512M
join_buffer_size=512M
sort_buffer_size=512M
myisam_sort_buffer_size=512M
...
Рейтинг: 0 / 0
11.09.2017, 14:54
    #245576
Конякула
Участник
[игнорирует гостей]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шут - адвокат разума
Помогите потюнить сарвер
Отчитываюсь.

Тормоза поборол. Всё оказалось просто. Для того, чтобы на сервере иметь возможность крутить разные php (разных версий) я подключал php как CGI. Оказалось это очень тормознутая система. Она собственно мне и давала те самые тормоза. Когда я это понял, я для начала перевел сайт на натвиный модуль Apache. Сайт задышал и нагрузка на сервер снизилась. А потом, поковырявшись я запустил php напрямую через nginx как FastCGI-fpm. Система стала жрать ещё чуть меньше ресурсов и работать чуть быстрее (или так же, но не медленнее).

Так что теперь сайты у меня крутятся без апача.
Программизд 02 
Мне помогло:

- оптимизация запросов
- исключил изыбточное вычисление новых. Вычисляю один раз на все случаи и откладываю в глобальную переменную. Далее беру из нее.
- увеличил оперативку
- добавил ядро
- включил opcache
У меня 2 ядра, 2 Гига памяти, opcache включен и для кеша данных ещё memcache. MySQL я чуток потюнил, дабавил где надо памяти. Веду лог длинных запросов. Таких нету.
...
Рейтинг: 0 / 0
11.09.2017, 17:57
    #245700
Конякула
Участник
[игнорирует гостей]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шут - адвокат разума
Помогите потюнить сарвер
Блин. Теперь сайт зависает периодически. Поработает, а потом 5 php-fpm процесса висят и ничего не отдают. И сайт не шевелится.
...
Рейтинг: 0 / 0
12.09.2017, 13:21
    #246508
Конякула
Участник
[игнорирует гостей]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шут - адвокат разума
Помогите потюнить сарвер
Всё. Вернул php апачу. И всё работает нормально вроде.
...
Рейтинг: 0 / 0
12.09.2017, 13:26
    #246511
Программизд 02
Администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гидроцефалы всех стран соединяйтесь!
Помогите потюнить сарвер
Что, php-fpm оказалась не настолько хороша как ее хвалили? :)
...
Рейтинг: 0 / 0
12.09.2017, 13:51
    #246522
Конякула
Участник
[игнорирует гостей]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шут - адвокат разума
Помогите потюнить сарвер
Программизд 02 
Что, php-fpm оказалась не настолько хороша как ее хвалили? :)
Он хорош. Но виснет собака. :-)
...
Рейтинг: 0 / 0
Форумы / Вопросы по IT / Помогите потюнить сарвер / 14 сообщений из 14, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]