Metal Messiah

Metal Messiah
Рейтинг
163
Регистрация
01.08.2010
Программистъ

<a href="go.php?url=http://blablabla">тыц</a>

go.php:

$url=$_GET["url"];

header("Location: $url");

это как сферический конь в вакууме. надо бы еще urlencode или вообще шифрование адреса

Нагрузка критическая? Сервер задыхается?

Сначала надо определить слабое место: это сайт (скрипты тормозят), база не успевает, CPU сервера занят, не хватает памяти или еще что и в зависимости от этого оптимизировать.

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

Подсказали ссылку на реализацию через cgroup:

===

yum install libcgroup

Here is my limit for apache:

/etc/cgconfig.conf

mount {

cpuset = /cgroup/cpuset;
cpu = /cgroup/cpu;
cpuacct = /cgroup/cpuacct;
}
group apache {
cpu {
cpu.cfs_quota_us="25000";
cpu.cfs_period_us="10000";
}
cpuacct {
cpuacct.usage="0";
}
cpuset {
cpuset.cpus="0,1,2,3,4,5,6,7";
}
}

/etc/cgrules.conf

apache cpu,cpuacct,cpuset apache/

/etc/init.d/cgconfig start

/etc/init.d/cgred start

This conf limit my apache at 250% and allow to use 8 cpu cores

источник. Буду пробовать.

Я перекраивал укозовские и друпаловские сайты на DLE. Нужно однозначно задать соответствие старых и новых урлов, поставить грамотный редирект согласно списку страниц, желательно не менять тайтлы и можно даже сохранить шаблон. Через некоторое время страницы в поиске меняют адреса на новые, позиции проседали временно и немного, подробнее не скажу т.к. мало статистики

нет, виртуализация xen

про cgroups я просто не знаю, с учетом того что это VPS доступа может и не быть

nice можно попробовать, если решит проблему - хорошо. ок, тестирую, спасибо

Может надо сервер настроить или ресурсов ему больше или сайт настроить?

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

Ресурсов больше точно не надо, большую часть времени те что есть используются наполовину, но пока все работает не в полную мощность.

Andreyka, спасибо, но судя по команде

bsub -R "affinity[core:membind=localprefer]"./myapp

задается при запуске, так же как я сейчас делаю через taskset. Команда позволяет дать affinity при запуске или уже работающим процессам по pid, а apache в режиме prefork создает эти процессы сам...

iHead, отдельное спасибо, это вроде бы оно. Стояло

worker_processes 2;

добавил

worker_cpu_affinity 0001 0010;

буду смотреть.

Что касается mysql, нашел информацию о innodb_thread_concurrency, innodb_write_io_threads, innodb_read_io_threads но там ни слова о том как задать конкретные ядра, только рекоммендация давать конкуренцию 2*количество ядер, да и у меня myisam.

Больше про mysql и apache ничего не нашел.

Тут написано как повесить все процессы на 1е ядро при загрузке и не трогать остальные, видимо так и сделаю, только в моем случае не на первое а на все кроме первого, только не понимаю что за pid 1 и будет ли оно работать.

Еще есть вариант вклеить запуск через taskset в скрипты, лежащие в /etc/init.d/ но там не очевидно куда, буду копаться

Окончательно отказался от идеи прокси, php отправляет запрос на нужный сервер, подключение идет к местеру и одному из слейвов в порядке приоритета по мере необходимости (т.е. при первом запросе)

Тему можно считать закрытой, всем спасибо.

Вообщем, все будут привыкать к понятию Greenwich Mean Time, о чем напишу мелким шрифтом. Системное время не трогал, все решил установкой

date_default_timezone_set('UTC');

в config.php, который инклюдится во все остальные скрипты сайта.

Ну тогда уже лучше форумный вариант - "столько-то минут назад"

Есть еще 1 проблема: при чтении 2 разными веб серверами из одной базы MySQL выводится на сайте разное время одного и того же события.

На 1 сервере БД и сайт, в системе GMT+0, выводит 08.09.14 12:03

На 2 сервере сайт, время EEST, выводит 08.09.14 16:03.

При подключении к MySQL даю запрос

SET time_zone = '+02:00'

или ставил 3 или 4 часа, в результате ничего не меняется, время все то же, везде хранится как unix timestamp (результат time() из php) int(4) unsigned.

Можно ли синхронизировать это не меняя системный часовой пояс на всех серверах на одинаковый?

Всего: 570