пятница, 10 сентября 2010 г.

Изменение hostid для Solaris 10 глобальной/неглобальной зоны и Solaris 8/9 контейнеров.

В Solaris 10 вы не можете изменить идентификатор host ID, не делая некоторые крупные замены аппаратных средств. В этой статье приводятся методы, позволяющие это сделать. Некоторые приложения, лицензированные к конкретному hostid, не будут работать, если их установить на другом сервере.

Однако вы можете указать пользовательский hostid на Solaris 8 или 9 контейнеров (не глобальной зоне), запущенных на Solaris 10 глобальной зоны. Это может быть сделано с помощью команды zonecfg -z. Инструкции по изменению hostid для Solaris 10 глобальных и неглобальных зон в нижней части этой статьи.

globalserver# zonecfg -z myzone1
zonecfg:myzone1> add attr
zonecfg:myzone1:attr> set name=hostid
zonecfg:myzone1:attr> set type=string
zonecfg:myzone1:attr> set value=”123456″
zonecfg:myzone1:attr> end
zonecfg:myzone1> exit

Остановить myzone1
globalserver# zonecfg -z myzone1 halt
Запустить myzone1
globalserver# zonecfg -z myzone boot

Проверить статус myzone1
globalserver# zonecfg list -vc

Залогиниться в консоль myzone1 и проверить hostid
globalserver@ zlogin -C myzone1

После ввода логина и пароля, запустить hostid.
# hostid
123456


Изменение hostid для Solaris 10 глобальных и неглобальных зон.

Здесь приводится небольшой скрипт, найденный на просторах интернета, который может быть использован для изменения hostid для Solaris 10 глобальных и неглобальных зон. Этот скрипт должен выполняться как процесс в фоновом режиме. Убийство этого процесса вернёт hostid к первоначальному значению, заложенному в оборудование. Вырезать и вставить нижеприведённый скрипт в файл с именем zhostid, сделать файл исполняемым. Измените следующие строки с идентификаторами, указав нужные.
global 12345678
myzone1 90abcdef

#!/usr/bin/ksh
#
# zhostid - demo changing hostids for Solaris Zones.
# Written using DTrace (Solaris 10 3/05).
#
# WARNING: This is a demonstration of DTrace, it is not intended as a
# standard daemon. In particular, hostids are used by Sun to track support
# calls, so changing hostids may make life somewhat confusing for all.
#
# 21-Jun-2005, ver 0.70 (first release)
#
# USAGE: zhostid &
#
# Edit the "Configuration" section below to set the zones and
# hostids to what is desirable.
#
# BASED ON: hostid.d by Iain Hayes, and idea by Jon Haslam.
#
# COPYRIGHT: Copyright (c) 2005 Brendan Gregg.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
# (http://www.gnu.org/copyleft/gpl.html)
#
# 21-Jun-2005 Brendan Gregg Created this.

#
# Configuration
#
hostids='
global 12345678
myzone1 90abcdef

' # simply modify the above by adding extra lines for each zone.

#
# Check hostids
#
print "$hostids" | while read zone hostid_hex; do
### Sanity check hostid
if [[ "$zone" == "" || "$zone" == "#" ]]; then continue; fi
if [[ "$hostid_hex" == *[g-zG-Z]* ]]; then
print "ERROR2: Invalid hostid $hostid_hex. "
print "Please use hexadecimal.\n"
exit 2
fi
if (( ${#hostid_hex} > 11 )); then
# see /usr/src/uts/common/conf/param.c for limit.
print "ERROR3: Length of hostid $hostid_hex too long. "
print "Limit 11 chars.\n"
exit 3
fi

### Convert hostid to decimal
typeset -i10 hostid_dec
hostid_dec=16#$hostid_hex

### Build DTrace code
body="$body
syscall::systeminfo:return
/zonename == \"$zone\" && self->command == 7/
{
copyoutstr(\"$hostid_dec\", self->buffer, 11);
}"
done

#
# Run DTrace
#
exec /usr/sbin/dtrace -n '

#pragma D option destructive
#pragma D option quiet
#pragma D option bufsize=32k

inline string hostid = "'$hostid_dec'";

syscall::systeminfo:entry
{
self->command = arg0;
self->buffer = arg1;
}

'"$body"'

syscall::systeminfo:return
{
self->command = 0;
self->buffer = 0;
}
'


Теперь запустите файл zhostid в фоновом режиме в качестве процесса. Этот файл должен быть запущен из глобальной зоны.

globalserver# ./zhostid &


Проверьте hostid

globalserver# hostid
12345678


Залогиньтесь в консоль myzone1

# zlogin myzone1
[Connected to zone 'myzone1' pts/10]
Last login: Tue Jun 21 03:51:10 on pts/10
Sun Microsystems Inc. SunOS 5.10 Generic January 2005 myzone1

# hostid
90abcdef




четверг, 22 июля 2010 г.

Использование ulimit для контроля ресурсов. (linux limit kernel)

Рассмотрим использование ulimit на примере ограничений пользователя worker

Итак, добавим в конец /etc/profile:

if [ "$USER" = "worker" ]; then

ulimit -c 0 # Запрещаем создавать core файлы
ulimit -d 48000 # Ограничиваем максимальный размер сегмента данных в 48 MB
ulimit -s 8192 # Ограничиваем максимальный размер стэка в 8 MB
ulimit -m 48000 # Ограничиваем максимальный размер резидентной части процесса (находящейся в ОЗУ) в 48 MB
ulimit -u 64 # Ограничиваем максимальное число запущенных этим пользователем процессов.
ulimit -n 128 # Ограничиваем максимальное число открытых файлов.
ulimit -f 100000 # Ограничиваем максимальный размер создаваемого файла в 100 MB
ulimit -v 100000 # Ограничиваем максимальный размер используемой виртуальной памяти в 100 MB
fi

Для просмотра текущих установок нужно набрать ulimit -a


Либо можно сделать так: например, ограничения на кол-во процессов делается с помощью PAM:
/etc/security/limits.conf
+
"session required /lib/security/pam_limits.so"
в /etc/pam.d/login
Может попробовать и тебе так сделать (/etc/security/limits.conf):
* soft nproc 2048




Источник http://opennet.ru/base/sys/ulimit_mc.txt.html

Apache. Ограничение ресурсов.

Следующие опции могут употребляться для ограничения возможности DoS-атак против Web-сервера:

  • MaxClients <число> - задает максимальное число клиентов, которые могут работать с сервером вместе. Иногда запросов настолько много, что у компьютера не хватает памяти для загрузки дополнительных копий Web-сервера для обслуживания запросов клиентов. Эта директива дает возможность ограничить максимальное число клиентов. Значение по умолчанию 150, тоже рекомендуется применять или это значение, или значение из диапазона 100-200. Если ограничение будет превышено, новые клиенты получат сообщение Connection Refused.
  • RLimitCPU <мягкий> [жесткий] - устанавливает лимит на употребление процессорного времени. Значения лимита задаются в секундах. Разрешается применение значения max, что означает максимальную загрузку процессора.
  • RLimitMEM <мягкий> [жесткий] - устанавливает лимит на применение сервером памяти, в байтах.
  • RLimitNPROC <мягкий> [жесткий] - задает ограничение на количество порожденных сервером процессов.
  • LimitRequestBody - задает максимально допустимый размер HTTP-запроса. Надо применять любое значение: от 0 (неограниченный) до 2.147.483.647 (2. Гб). Если это значение превышено, клиенту будет возвращено сообщение об ошибке. Нужно помнить, что если используются CGI-скрипты для загрузки файлов на сервер, то размер запроса может достигать несколько мегабайтов.
  • LimitRequestFields - максимальное число полей заголовка HTTP-запроса. Допустимыми являются значения от 0 (не ограничено) до 32767.
  • LimitRequestFieldSize - максимальный размер поля заголовка запроса, в байтах. Допустимыми являются значения от 0 (не ограничено) до 8190 (около 8 Кб).
  • LimitRequestLine - максимальный размер строки HTTP-запроса. Не надо устанавливать слишком маленькое значение, так как тогда перестанут работать многие CGI-скрипты, использующие метод GET. Допустимыми являются значения от 0 (не ограничено) до 8190 (около 8 Кб).
Источник http://suvan.ru/page/apache-sokrytie-versii.html

вторник, 20 июля 2010 г.

linux, мониторинг, производительность

hdparm -t -T /dev/sda1 – дисковая производительность
stat -f / – количество занятых/свободных блоков/инодов
iostat -m -x sda 2 6 – смотрим загрузку указанного диска (пакет sysstat)
vmstat -S M 2 50 – смотрим статистику/потребление по ресурсам
free -m (колонка cache – память занятая под кэш ФС)
cat /proc/meminfo
cat /proc/cpuinfo
cat /proc/interrupts – кто генерит больше прерываний
cat /proc/net/dev – передано через интерфейс в байтах
cat /proc/sys/fs/file-max – макс. допустимое количество откр. файлов (sysctl -w fs.file-max=”16384″)
cat /proc/sys/fs/file-nr
nload – графический мониторинг трафика
fdisk -l – информация о дисках и разделах
top, 1 – распределение нагрузки по ядрам
netstat -s # статистика по сети. Например, netstat -s |grep establish текущее количество установленных соединений
ethtool eth0 # информация о режимах работы поддерживаемых сетевой картой, о текущих режимах и параметрах

Взято здесь http://unix-notes.ru/2008/12/09/linux-monitoring-proizvoditelnost/

четверг, 29 апреля 2010 г.

Копирование файловых систем гостевых машин в XEN на другую машину

Не следует использовать rsync для копирования файловой системы с одного компьютера на другой. Нужно использовать dd:

# dd if=/dev/vgxen/lvol0 | ssh dd of=/dev/vgxen/lvol0

Network Latency имеет отрицательное значение в гостевой системе Windows XEN при CPU>1

Латентность сети может иметь отрицательные значения в гостевой системе Windows XEN при установленном количестве процессоров больше 1.
Например, пинг с данной машины до удалённого хоста может иметь такой вид:

>ping 192.168.2.1
Reply from 192.168.2.1: bytes=32 time=-7639ms TTL=64

Для решения данной проблемы необходимо добавить параметр /usepmtimer в C:\boot.ini в гостевой ОС Windows и перегрузить её.

Данная проблема описана в Microsoft Support article number 895980 - http://support.microsoft.com/kb/895980.

Настройка времени в гостевых паравиртуализированных системах XEN (или корректировка времени в гостевых системах).

В ситуации когдя время в гостевых паравиртуализированных машинах рассинхронизируется от хостовой машины, выставить его вручную или через службу NTP не получается. Т.е. время управляется гипервизором XEN для всех гостевых машин.
Можно выставить собственное управление часами в гостевой машине. Для этого нужно выставить параметр xen.independent_wallclock в 1 в /etc/sysctl.conf
Пример:

xen.independent_wallclock = 1

Затем выполнить

#echo 1 > /proc/sys/xen/independent_wallclock

Теперь в гостевой системе можно выставлять автономное время вручную или через NTP
(Данный механизм не подходит для полной виртуализации гостевых систем)