КнигоПровод.Ru22.11.2024

/ИТ-книги/O'REILLY

Тюнинг веб-сервера. — 2-е изд. — Киллелиа П.
Тюнинг веб-сервера. — 2-е изд.
Оптимизация веб-сервера
Киллелиа П.
год издания — 2003, кол-во страниц — 528, ISBN — 5-94723-476-9, 0-596-00172-x, тираж — 3000, язык — русский, тип обложки — твёрд. 7БЦ матов., масса книги — 800 гр., издательство — Питер
цена: 1000.00 рубПоложить эту книгу в корзину
Second Edition
Web Perfomance Tuning
Patrick Killelea

O'REILLY 1998, 2002

Пер. с англ. Д. Солнышкова

Уровень пользователя: опытный

Формат 70x100/16
ключевые слова — веб-, apache, web-, администр, сайт, сервер, масштабируем, linux, http, cgi, производительн, perl, rstat, реляцион, java, snmp, rmon, надёжн, брандмауэр, ssl, -бастион, dns, кэширов, windows, macintosh, unix, интернет, tcp, udp, corba, raid, jsp, asp, php

Эта книга для веб-мастеров, системных администраторов, системных архитекторов, системных интеграторов, программистов веб-приложений, редакторов сайтов. Она поможет повысить производительность веб-сервера, оценить требования проектируемого сайта к оборудованию и программному обеспечению, а также расскажет о вопросах масштабирования сайтов. Производительность рассматривается с точки зрения обычного пользователя — насколько быстро веб-сервер может удовлетворить его запрос. Нередко внимание системного администратора концентрируется на веб-сервере, хотя узким местом может быть не сам сервер, а низкоскоростное подключение клиента к сети, динамическое формирование веб-страницы или производительность базы данных. Лучший путь к повышению производительности веб-системы лежит через хорошее понимание его архитектуры и порядка работы каждого из его элементов. В книге рассматриваются приложения, работающие под управлением как операционной системы Unix, так и Windows. Предполагается наличие у читателя общего знакомства с техническими аспектами работы веб-сайтов.

ОГЛАВЛЕНИЕ

Предисловие21
 
Для чего нужна эта книга?22
Для кого предназначена эта книга?23
Сделанные предположения23
Как устроена эта книга24
Шрифты26
Как с нами связаться27
Другие книги и ресурсы27
Книги27
Веб-сайты, посвящённые производительности28
Группы новостей, имеющие отношение к производительности веб29
Ограничение гарантий29
Благодарности ко второму изданию30
 
Часть I. Предварительные сведения
 
Глава 1. Быстрый и мёртвый32
 
Проверка браузера32
Проверка сервера40
Основные рекомендации46
 
Глава 2. Архитектура веб-сайта47
 
Компромиссы47
Сохранение информации и масштабируемость47
Дублирование и простота49
Синхронность и асинхронность50
Связь без логического соединения50
Планирование и разработка51
Процедурное и объектно-ориентированное программирование52
Основы53
Браузер53
Система балансировки нагрузки54
Веб-сервер57
Связующие программы57
База данных58
Пример архитектуры веб-сайта58
Один компьютер58
Стековая архитектура59
Уровни60
Linux на мейнфрейме60
Реальный масштаб времени60
Тенденции61
Программы, используемые на широко известных сайтах62
Примеры конфигураций62
Низкая нагрузка62
Средняя нагрузка63
Большая нагрузка63
Какие сайты являются наиболее загруженными?64
Основные рекомендации64
 
Глава 3. Планирование мощностей65
 
Займитесь подсчётами…65
…но верьте своим глазам больше, чем цифрам66
Вопросы, которые нужно себе задавать67
Какая вам нужна пропускная способность?76
Время ожидания важнее пропускной способности77
О пропускной способности77
Оценка пропускной способности сети веб-сервера79
Насколько быстрый сервер вам нужен?80
Сколько памяти нужно серверу?81
Память для операционной системы82
Память для httpd83
Память для содержимого83
Память для CGI83
Основные рекомендации84
 
Глава 4. Контроль производительности85
 
Параметры производительности85
Время ожидания и пропускная способность85
Время ожидания для сети88
Измерение времени ожидания и пропускной способности сети89
Коэффициент использования92
Эффективность92
Использование сценариев интерпретатора93
Использование С94
Использование Perl96
Контроль производительности сети с помощью Perl96
Отображение результатов с помощью gnuplot97
Пример сценария на Perl97
Компоненты102
Автоматическая генерация сценариев для контроля с помощью sprocket103
Использование реляционной базы данных для сохранения данных
о производительности109
Помещение данных в базу110
Получение данных из базы110
Контроль коэффициента использования с помощью rstat111
Сохранение данных rstat в реляционной БД114
Использование данных rstat115
Получение данных из БД в стандартный поток вывода115
Построение графиков данных, хранящихся в БД116
Контроль статистики процессов119
Использование CGI для запуска программных средств120
Включение подробного анализа с помощью rstat120
Работа с Telnet в языке Perl121
Генерация графиков из результатов работы ps123
Контроль прочих параметров127
Контроль с помощью Java130
Приборная панель на веб-странице133
Внимание! Избыток контроля вреден для здоровья вашего сайта!134
SNMP134
RMON135
ARM135
Прочие ресурсы135
Основные рекомендации136
 
Глава 5. Тестирование на нагрузку137
 
Подготовка к тестированию137
Опасайтесь переустановки часов138
Почему реальная производительность отличается от тестовой?139
Средства тестирования нагрузки139
Написание собственных тестовых программ140
Проблемы с таймером141
Тестирование на нагрузку при избыточном контроле143
Синхронизация теста на нагрузку146
Хаотическое тестирование на нагрузку146
Как остановить тестирование?146
Создание нагрузки на сеть147
Спецификации и эталонные тесты148
WebStone150
SPECweb99151
ТРС-С и ТРС-D151
Тесты прокси-серверов152
Тесты производителей152
CaffeineMark152
Прочие ресурсы152
Основные рекомендации152
 
Глава 6. Анализ производительности153
 
Поиск «узких мест» с помощью analysis.cgi153
Подслушивание HTTP с помощью sprocket156
Изучение соединений157
Анализ файлов журналов157
Средний объём передачи159
Распределение размеров файлов162
Хиты в секунду163
Переменная нагрузка и длина очереди165
Когда конкретно записываются хиты?166
Кто ваш самый частый пользователь?167
Который из процессов мой?168
Кто работает с этим файлом?168
Какие файлы используются моими процессами?169
Что происходит при зависании БД?169
Ещё немного советов170
Основные рекомендации171
 
Глава 7. Надёжность172
 
Типичные отказы172
Переполнение диска172
У процесса закончились файловые дескрипторы173
Ошибки при работе с указателями на С173
Утечки памяти173
Блокировка потоков174
Блокировка ресурса завершившимся процессом175
Перегрузка сервера175
Система балансировки нагрузки не может обнаружить
отказавший компьютер176
Перегружена подсеть176
Израсходованы терминалы176
В базе данных закончились указатели176
Плохой драйвер устройства177
Отказы оборудования177
Отказ питания177
Администратор перепутал сервер177
Ошибочное включение файла в шаблон178
Проблемы с разрешениями178
Ошибки в путях178
Проблемы с заплатами178
Каскадное распространение перегрузки179
Отказы из-за контроля179
Повторные обращения вызывают новые отказы179
Случайная блокировка важных таблиц179
Использование БД там, где можно обойтись файлами180
Программа не может подключиться к БД после отказа180
Программа не перезапускается после перезагрузки180
«Раздвоение личности»180
Брандмауэр блокирует важную службу180
Чтение данных с экрана не работает из-за того, что меняется дизайн181
Зависимости181
Борьба с последствиями отказа181
Основные рекомендации182
 
Глава 8. Безопасность183
 
HTTPS и SSL183
Брандмауэры187
Узлы-бастионы187
Chroot188
Основная рекомендация188
 
Глава 9. Разбор ситуаций189
 
Неограниченный рост таблицы189
Обратный поиск в DNS замедляет работу с журналом190
Перекрученный кабель192
Рост пула базы данных ограничивает производительность195
Основная рекомендация196
 
Глава 10. Принципы и схемы197
 
Принципы повышения производительности197
Иногда приходится проигрывать197
Измерение меняет объект197
Знания важнее всего198
«Бесплатных обедов» не бывает198
Доходы сокращаются199
Переносимость уменьшает производительность199
Абстрагирование уменьшает производительность200
Защищённость уменьшает производительность201
Память имеет иерархическую структуру201
Кэширование зависит от локальности ссылок202
Операции ввода-вывода всегда медленны202
Информация относительна203
Оборудование дёшево, программы дороги205
Целью оптимизации является одновременность выхода из строя
компонентов205
Хорошее относительно206
Биты — это деньги206
Производительность Интернета падает нелинейно206
Глобальная оптимизация даёт наилучшие результаты207
Что произошло однажды, скоро произойдёт снова207
Правило 80/20207
Люди часто важнее знаний207
Схемы улучшения производительности208
Амортизация208
Кэширование208
Профилирование209
Параллельная обработка209
Используйте то, что знаете210
Простота210
Основные рекомендации210
 
Часть II. Подробно об оптимизации
 
Глава 11. Браузеры212
 
Как работают браузеры212
Виды браузеров217
Netscape217
Internet Explorer217
Opera218
Neoplanet218
WebTV219
Cello219
Mosaic219
lynx219
Amaya220
Tango220
Идеальный браузер220
Скорость браузера221
Советы по настройке браузеров222
Общие рекомендации222
Советы для Internet Explorer227
Советы для Netscape227
Прочие веб-клиенты228
Gnutella и одноранговые сети229
Основные рекомендации230
 
Глава 12. Операционная система клиента231
 
Microsoft Windows231
Устраните беспорядок в системе231
Специальные драйверы экрана232
Память и диски232
Системный монитор233
Сетевые утилиты233
MTU234
Macintosh234
Эмуляция 68К234
Сеть235
Память и диск235
Расширения236
Unix236
Основные рекомендации238
 
Глава 13. Аппаратное обеспечение клиента239
 
Процессор239
ОЗУ242
Кэш243
Шина243
Диск244
IDE244
SCSI245
Фрагментация245
Видео245
ММХ246
Цвета и разрешение246
Драйверы247
3D и видеоклипы247
Тесты для видеоадаптеров247
Ввод-вывод247
UART248
Аппаратное сжатие может приводить к переполнениям249
BIOS249
Основные рекомендации250
 
Глава 14. Линии связи и оконечные устройства251
 
Пересылка и время ожидания252
Модем — выезд на информационную магистраль252
Время ожидания и пропускная способность от модема к модему253
Синхронизация254
Аппаратное сжатие254
Коррекция ошибок255
Качество линии255
Внутренние модемы быстрее256
Переполнение буферов UART256
Команды AT и время набора номера257
Объединение каналов257
ISDN257
Кабельные модемы259
xDSL259
Ещё более скоростные линии260
56К, Т1 и ТЗ260
Frame Relay261
ATM261
Спутники262
Интрасети262
Сегментирование262
Оборудование для сегментирования263
Ethernet265
Перехват пакетов267
Буферы сетевых адаптеров269
Быстрый Ethernet270
Коммутируемый Ethernet270
Кабели Ethernet271
Шум271
Средства моделирования сетей272
Интернет272
В обход Интернета274
Точки доступа к сети274
Провайдеры276
Выбор провайдера278
Дублирование279
Маршрутизаторы279
Кто виноват?280
Будущее Интернета281
ПТТ281
Основные рекомендации282
 
Глава 15. Сетевые протоколы283
 
Власть и протоколы283
Факторы, влияющие на производительность сетевых протоколов285
Пакеты, кадры и ячейки переменного и фиксированного размеров285
Совмещённая отправка285
Конвейер и подтверждение отдельных пакетов286
Односторонние и двусторонние протоколы286
Ошибки286
Количество прыжков286
Уровни286
Протоколы веб287
ARP287
РРР287
Протоколы маршрутизации288
Протокол Интернета288
TCP292
Т/TСР302
UDP303
HTTP305
FTP315
NNTP316
CORBA316
X317
Основные рекомендации317
 
Глава 16. Аппаратное обеспечение сервера318
 
Коробка с проводом318
Хорошая подсистема ввода-вывода319
Несколько шин319
Быстрые диски319
Много памяти320
Масштабируемость320
Сетевой адаптер320
Шина322
Оперативная память323
Характеристики ОЗУ323
Процессор324
Архитектура процессора325
Многопроцессорные компьютеры328
Тестирование масштабируемости Sun SMP329
Жёсткий диск342
Архитектура и параметры дисков342
IDE344
EIDE344
SCSI345
Fibre Channel345
RAID346
Производительность типичных дисков346
Фрагментация347
Активность дисков и идентификаторы процессов348
Основные рекомендации348
 
Глава 17. Операционная система сервера349
 
Unix и рождение Сети349
Версии Unix350
Solaris351
AIX352
Digital Unix352
Linux352
Irix353
BSD353
Mach OS353
Устройство Unix353
Системные и библиотечные вызовы353
Процессы и ядро354
Планирование354
Контекст ядра355
Unix и httpd356
Уменьшение нагрузки на операционную систему358
Создание процессов359
Адресное пространство360
Копирование областей памяти362
Освобождение памяти362
Файловая система364
Оконный интерфейс372
Версии и заплаты372
Настраиваемые параметры операционных систем373
Количество дескрипторов файлов373
Частота очистки буферов файловой системы376
Средства контроля Unix377
ps377
perfbar378
perfmeter378
perfmon379
rstat380
rup380
hstat380
top380
xload381
Трассировщики системных вызовов381
Программы прослушивания сети383
netstat383
vmstat384
sar384
Сколько соединений может обслужить мой веб-сервер?385
Сколько процессов может одновременно выполняться на моём сервере?386
Насколько быстро может мой сервер породить новый процесс?387
Unix и Windows NT в качестве ОС для веб-серверов388
Достоинства и недостатки NT388
Достоинства и недостатки Unix389
Проект Exokernel390
Основные рекомендации390
 
Глава 18. Программное обеспечение сервера391
 
Эволюция веб-серверов391
Серверы, порождавшиеся демоном inetd391
Серверы, порождающие процессы392
Многопоточные серверы393
Серверы с постоянными соединениями393
Системные вызовы веб-сервера393
Как происходит сбой сервера395
Утечки памяти397
Настройка Apache и Netscape397
Короткие пути397
Не преобразуйте время397
Буферизуйте запись в журнал397
Настройка Apache398
Настройка Netscape402
Прочие серверы407
Недостающие функции409
Прокси-серверы409
Иерархическое кэширование410
Основные рекомендации411
 
Глава 19. Содержимое412
 
Важен размер412
Лучше не бывает413
Кэширование и отличия413
HTML и сжатие413
gzip414
Советы HTML-разработчикам415
Полегче на сервере!415
Полегче в сети!416
Полегче с браузером!417
Полегче с пользователем418
Берегитесь предвзятых HTML-редакторов419
Идите в ногу с миром419
Используйте средства проверки HTML419
Объектная модель документа420
Графика420
Анимация422
VRML422
Аудио422
Видео423
Основные рекомендации424
 
Глава 20. Специализированные приложения425
 
Программисты425
CGI-программы425
Внутреннее устройство CGI и вопросы производительности426
Основные рекомендации428
Бесконечные циклы428
Неудержимо растущие CGI-программы429
Защита от зацикливания CGI-программ430
Не заставляйте клиента ждать431
Переложите обработку на браузер432
Файлы cookie434
Java434
Обрабатывайте запросы заранее и кэшируйте результаты435
Короткая — значит красивая438
Вопросы масштабирования438
Разделяйте большие формы на несколько маленьких438
Поиск в DNS на сервере439
Отладка и оптимизация439
Оптимизация CGI439
Сценарии интерпретатора439
Perl440
С442
Демонизация444
Производительность при обращении к БД445
Ведение журналов445
NSAPI и lSAPI446
Объектная модель документа446
JSP, ASP, PHP446
Основные рекомендации447
 
Глава 21. Java448
 
Язык Java никогда не будет достаточно быстрым для пользовательских
интерфейсов448
Java достаточно быстр для серверных приложений449
Внутренние проблемы с производительностью, присущие Java449
Проверка границ массивов449
Блокирующий сетевой ввод-вывод450
Интерпретация байт-кода450
Верификация байт-кода451
Динамическая привязка методов451
Сбор мусора451
Косвенная адресация452
Интернационализация и локализация452
Объектная ориентированность452
Стековая ориентация453
Синхронизация453
Многопоточное программирование453
Советы программистам455
Используйте хорошие алгоритмы455
Делайте цепочки наследования короткими455
Используйте стековые переменные456
Объединяйте классы456
Используйте библиотеки Java457
Не опрашивайте457
«Финализируйте» методы457
Создавайте поменьше объектов457
Опасайтесь утечек объектов458
Попробуйте не пользоваться методами для работы с переменными458
Используйте сложные операторы458
Используйте шаг типа int458
Следите за скоростью доступа к различным переменным459
Локальные переменные быстрее, чем переменные класса459
Переменные класса быстрее, чем массивы459
Используйте собственные методы460
Используйте тайм-ауты сетевой подсистемы460
Буферизуйте ввод-вывод460
Используйте сокеты вместо URL460
Используйте UDP460
Используйте потоки461
Используйте notify462
Используйте синхронизацию как можно реже462
Не помещайте синхронизируемые методы внутрь циклов463
Следите за родительским потоком463
Обратный отсчёт бывает быстрее прямого463
Уменьшайте количество строк463
Используйте строчные буферы или массивы463
Берегитесь медленных шрифтов464
Упрощайте метод Paint464
Двойная буферизация обеспечит плавность анимации464
Пусть система отлавливает ошибки за вас464
Не преобразуете даты и время465
Берегитесь RMI, EJB и CORBA466
Компиляторы466
Оптимизация467
Профилируйте свой код467
JVMPI468
Декомпиляторы468
Средства профилирования на уровне операционной системы469
JIT-компиляторы469
Статические компиляторы470
Виртуальные машины471
Параметры времени выполнения472
-verbosegc472
-noverify472
-Xmsn и -Xmxn472
Сделайте Рай побольше472
-train473
Используйте собственные потоки473
Используйте архивы .jar473
Подключаемый модуль Java473
-start_java474
Java-процессоры474
Тесты для Java474
Недостатки тестов475
Веб-сайты, где размещены сведения о производительности Java475
Основные рекомендации475
 
Глава 22. Базы данных476
 
Нужна ли вам реляционная база даных?477
Как узнать, что вам нужна база данных?477
Альтернативы477
Повышение производительности478
Подготовленные операторы и связанные переменные478
Денормализуйте таблицы479
Не создавайте курсоры в циклах479
Прямые соединения479
Базы данных в основной памяти479
Многоярусные системы479
Конфигурация пула соединений480
Запросы480
Индексы481
Блокировка на уровне строк481
Объединение веб-сервера и базы данных481
Сколько соединений может обслужить ваша база данных?482
Когда база данных перегружена483
Анализ483
Основные рекомендации484
 
Приложение. Обзор продуктов, предназначенных
для оптимизации веб-сайта485
 
Недостатки коммерческих средств485
Средства контроля486
Средства создания нагрузки490
Упреждающие загрузчики491
Оптимизаторы сетей492
Оптимизаторы MTU492
Optimal Application Expert492
Контроль трафика на уровне IP492
Системы сжатия содержимого494
Гибриды средств разработки и баз данных495
Профилировщики и оптимизаторы Java496
Службы кэширования496
Профессиональные услуги497
Средства балансировки нагрузки497
Средства моделирования499
 
Алфавитный указатель500

Книги на ту же тему

  1. UNIX. Справочник, Роббинс А., 2007
  2. Настройка производительности UNIX-систем, Мусумеси Д. П., Лукидес М., 2003
  3. TCP/IP. Сетевое администрирование, 3-е издание, Хант К., 2004
  4. Perl для системного администрирования, Бланк-Эдельман Д. Н., 2001
  5. Создание защиты в Интернете, Цвики Э., Купер С., Чапмен Б., 2002
  6. Конструирование распределённых объектов. Методы и средства программирования интероперабельных объектов в архитектурах OMG/CORBA, Microsoft/COM и Java/RMI, Эммерих В., 2002
  7. DNS и BIND, Альбитц П., Ли К., 2002
  8. UNIX. Практическое пособие администратора, Торчинский Ф., 2003
  9. Linux и UNIX: программирование в shell. Руководство разработчика, Тейнсли Д., 2001
  10. Запускаем Linux. — 3-е изд., Уэлш М., Далхаймер М. К., Кауфман Л., 2001
  11. Perl 6 и Parrot: справочник. — 2-е изд., Рэндал Э., Сугальски Д., Тёч Л., 2005
  12. Linux. Карманный справочник, Граннеман С., 2007
  13. Linux: основные команды. Карманный справочник, Баррет Д. Д., 2007
  14. Программирование на C++ в Linux, Секунов Н. Ю., 2003
  15. Perl: Библиотека программиста, Кристиансен Т., Торкингтон Н., 2000
  16. Perl & XML. Библиотека программиста, Макинтош Д., Рэй Э. Т., 2003
  17. Программирование на Perl, Уолл Л., Кристиансен Т., Орвант Д., 2001
  18. Perl. Сборник рецептов. Для профессионалов. 2-е изд., Кристиансен Т., Торкингтон Н., 2004
  19. CGI программирование на Perl, Гулич С., Гундаварам Ш., Бирзнекс Г., 2001
  20. Программирование на Perl DBI, Декарт А., Банс Т., 2000
  21. CGI/Perl: Создание программ для Web, Пэтчетт К., Райт М., 1999
  22. Perl: изучаем глубже. — 2-е изд., Шварц Р. Л., Фой Б., Феникс Т., 2007
  23. Perl-отладчик. Карманный справочник, Фоули Р., 2005
  24. Изучаем Perl, Шварц Р. Л., Кристиансен Т., 1999
  25. Linux. Справочник, Сивер Э., Спейнауэр С., Фиггинс С., Хекман Д., 2001
  26. Создаём динамические веб-сайты с помощью PHP, MySQL, JavaScript, CSS и HTML5. — 4-е изд., Никсон Р., 2017
  27. GCC. Настольная книга пользователей, программистов и системных администраторов, Гриффитс А., 2004
  28. Профессиональное PHP программирование, 2-е издание, 2003
  29. PHP. Справочник, Хадсон П., 2006
  30. PHP. Сборник рецептов, Скляр Д., Трахтенберг А., 2005
  31. Java 2, Ноутон П., Шилдт Г., 2000
  32. Профессиональное программирование на PHP, Шлосснейгл Д., 2006
  33. Java сервлеты и JSP: сборник рецептов, Перри Б. У., 2005
  34. Введение в Java-технологию, Сафонов В. О., 2002
  35. Платформа .NET для Java-программистов, Гиббонз П., 2003
  36. Java для Internet в Windows и Linux, Дунаев С. Б., 2004
  37. Горький вкус Java: Библиотека программиста, Тейт Б., 2003
  38. Java в примерах. Справочник, 2-е издание, Флэнаган Д., 2003
  39. Разработка корпоративных Java-приложений с использованием J2EE и UML, Амриш К. И., Ахмед Х. З., 2002
  40. JavaBeans, Гарольд Э. Р., 1999
  41. Java. Сборник рецептов для профессионалов, Дарвин Я. Ф., 2002
  42. Enterprise JavaBeans, Монсон-Хейфел Р., 2002
  43. Математическая теория надёжности, Барлоу Р., Прошан Ф., 1969
  44. Элементы теории надёжности для проектирования технических систем, Райкин А. Л., 1967
  45. Основы теории надёжности. — 2-е изд., перераб. и доп., Половко А. М., Гуров С. В., 2006
  46. MySQL. Сборник рецептов, Дюбуа П., 2004
  47. MySQL и mSQL. Базы данных для небольших предприятий и Интернета, Яргер Р. Д., Риз Д., Кинг Т., 2000
  48. Настройка SQL. Для профессионалов, Тоу Д., 2004
  49. SQL: полное руководство, Грофф Д. Р., Вайнберг П. Н., 2000
  50. Sybase. Настольная книга администратора, Хичкок Б., 2000
  51. Всё об Internet, Крол Э., 1995
  52. Галактика Интернет: Размышления об Интернете, бизнесе и обществе, Кастельс М., 2004

© 1913—2013 КнигоПровод.Ruhttp://knigoprovod.ru