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

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

Помогите. Чего посмотреть? Где поковырять?
...
Рейтинг: 0 / 0
Помогите потюнить сарвер
    #245161
Конякула
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей]
Шут - адвокат разума
В Mysql включил логирование длительных запросов и запросов без индексов. В логе ничего подозрительного нету. Всё запросов более 0,002 секунды нет ни одного. Не пойму где засада.
...
Рейтинг: 0 / 0
Помогите потюнить сарвер
    #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
Помогите потюнить сарвер
    #245164
Фотография Программизд 02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Администратор
Гидроцефалы всех стран соединяйтесь!
Там правда пути под мой проект. Возможно тебе их нужно будет подкорректировать. Но думаю идея понятна.

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

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

Мне помогло:

- оптимизация запросов
- исключил изыбточное вычисление новых. Вычисляю один раз на все случаи и откладываю в глобальную переменную. Далее беру из нее.
- увеличил оперативку
- добавил ядро
- включил opcache
...
Рейтинг: 0 / 0
Помогите потюнить сарвер
    #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
Помогите потюнить сарвер
    #245576
Конякула
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей]
Шут - адвокат разума
Отчитываюсь.

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

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

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


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