Archive

Posts Tagged ‘performance’

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

December 9th, 2008

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 # информация о режимах работы поддерживаемых сетевой картой, о текущих режимах и параметрах
Отличная статья про использование top-утилит

linux ,

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

December 9th, 2008

top -mio -o total – показать I/O по процессам
top -S – показать системные процессы в топе (по дефолту они не показываются)
gstat – нагрузка на диски
iostat -d -w1 -c7 – нагрузка на диски
systat -io start 1
diskinfo -t da0 – тест на дисковую производительность
tunefs -p /var/ – информация о настройках файловой системы
vmstat -z чего не хватает
vmstat -i прерывания по устройствам
netstat -i ошибки на интерфейсах
systat -ifstat – интенсивность передачи трафика
netstat -inb – передано через интерфейс в байтах
netstat -w1 – количество пакетов/ошибок/байт на интерфейсе
sysctl kern.ipc.numopensockets – количество открытых сокетов
df -H – количество свободного места
df -i – количество свободных инодов

Для детальной информации по расходу памяти:

fetch -o /usr/local/bin/free http://people.freebsd.org/~rse/dist/freebsd-memory
chmod +x /usr/local/bin/free
free

Смотреть top: mem Inact, если меньше RAM/2 то мало памяти под дисковый кеш.

“помеченные как Inact, Cache и Buf – это всё кэшированные данные разных степеней устаревания”

При большой дисковой нагрузке, особенно с большим количеством мелких файлов смотреть на vfs.ufs.dirhash_maxmem. Можно увеличить до 8-16-32 мегов и более. sysctl -a | egrep “kmem|dirhash|shpg” смотреть чтобы vfs.ufs.dirhash_lowmemcount не росло.

+ неплохой обобщающий топик про тюнинг nginx

Выжимка из доклада Сысоева про тюнинг фряхи

Хороший топик про Тюнинг отдачи мелких картинок через nginx на FreeBSD

FreeBSD ,

установка и запуск mysql, оптимизиция производительности

December 9th, 2008
cd /usr/ports/databases/mysql50-server && make install

базы будем держать в /home/mysql

echo "mysql_enable="YES"" >> /etc/rc.conf
echo "mysql_dbdir="/home/mysql/"" >> /etc/rc.conf

копируем my.cnf

mkdir /home/mysql
mkdir /home/mysql/tmp
chown -R mysql /home/mysql/
chmod -R 755 /home/mysql/

Конфига мускула зависят от размера базы, размера оперативы, характера нагрузки и тд.
Но для сервака порядка Xeon 5150 / 2GB и средней нагрузки можно для начала так:

[mysqld]
bind-address = 127.0.0.1

datadir=/home/mysql/myisam
port        = 3306
socket      = /tmp/mysql.sock
skip-locking

key_buffer = 128M
max_allowed_packet = 8M
table_cache = 1024
sort_buffer_size = 32M
read_buffer_size = 32M
read_rnd_buffer_size = 16M
myisam_sort_buffer_size = 64M
thread_cache_size = 30
query_cache_size = 128M
join_buffer_size = 8M
max_connections = 100
max_connect_errors=10000
thread_concurrency = 4 #Try number of CPU's*2 for thread_concurrency
net_buffer_length = 32K
expire_logs_days = 10
log_warnings = 1
wait_timeout = 100
interactive_timeout = 100
concurrent_insert = 2
tmp_table_size = 32M
max_heap_table_size = 32M
myisam-recover=backup,force

tmpdir  = /home/mysql/tmp/

Для выявление тормозных запросов можно использовать slow log, mytop.
Посмотреть эффективность кэширование:

mysqladmin extended-status | egrep Qcache

Qcache_free_blocks показывает сколько свободных блоков есть в кеше;
Qcache_total_blocks – количество занятых блоков;
Qcache_free_memory говорит о том, сколько свободной памяти осталось в кеше;
Qcache_hits – количество запросов, результаты которых были взяты из кеша;
Qcache_inserts – количество запросов, которые были добавлены в кеш;
Qcache_lowmem_prunes – количество запросов, которые были удалены из кеша из-за нехватки памяти;
Qcache_not_cached – количество запросов, которые не были записаны в кеш из-за использования функций работы со временем и т.п.;
Qcache_queries_in_cache – количество запросов, которые находятся в кеше.

После начала эксплуатации еще хорошо посмотреть что о настройках скажет mysqltuner

Оптимизация таблиц:

mysqlcheck --repair --analyze --optimize --all-databases --auto-repair

Важный момент (FreeBSD):
Необходимо следить, чтобы размер процесса mysqld не превысил максимального размера памяти доступного для одного процесса. Если используется FreeBSD c архитектурой i386, то по умолчанию этот размер равен 512MB. Если произойдет превышение, то в логе мускуля будут такие сообщения: “/usr/local/libexec/mysqld: Out of memory (Needed 2375270 bytes)”. Чтобы увеличить это значение необходимо сделать kern.maxdsiz=1073741824 в /boot/loader.conf
Посчитать объем памяти, который займет mysqld можно по этой формуле: key_buffer_size + (read_buffer_size + sort_buffer_size)*max_connections

mysql ,

loader.conf

December 8th, 2008

в loader.conf если система i386

kern.maxdsiz=1073741824
kern.dfldsiz=1073741824
kern.maxssiz=1073741824

# если активно используется sendfile в nginx то стандартного количества буферов может не хватать. см netstat -m

kern.ipc.nsfbufs=30240

### только если планируется десятки тысяч соединений. для i386 надо в ядро options KVA_PAGES=512
### vm.kmem_size=1073741824
при любой системе (надо ли? вроде как повышает вероятность ддоса)

accf_data_load="YES"
accf_http_load="YES"

FreeBSD , , ,