### 優化 Nginx
Ngnix使用hash表來協助完成請求的快速處理。
考慮到保存鍵及其值的hash表存儲單元的大小不至于超出設定參數(hash bucket size), 在啟動和每次重新配置時,Nginx為hash表選擇盡可能小的尺寸。
直到hash表超過參數(hash max size)的大小才重新進行選擇. 對于大多數hash表都有指令來修改這些參數。例如,保存服務器名字的hash表是由指令 `server_names_hash_max_size` 和 `server_names_hash_bucket_size`所控制的。參數hash bucket size總是等于hash表的大小,并且是一路處理器緩存大小的倍數。在減少了在內存中的存取次數后,使在處理器中加速查找hash表鍵值成為可能。如果hash bucket size等于一路處理器緩存的大小,那么在查找鍵的時候,最壞的情況下在內存中查找的次數為2。第一次是確定存儲單元的地址,第二次是在存儲單元中查找鍵值。因此,如果Nginx給出需要增大 hash max size 或 hash bucket size的提示,那么首要的是增大前一個參數的大小.
### 事件模型
Nginx支持如下處理連接的方法(I/O復用方法),這些方法可以通過`use`指令指定。
- **select** - 標準方法。 如果當前平臺沒有更有效的方法,它是編譯時默認的方法。你可以使用配置參數 `--with-select_module` 和 `--without-select_module` 來啟用或禁用這個模塊。
- **poll** - 標準方法。 如果當前平臺沒有更有效的方法,它是編譯時默認的方法。你可以使用配置參數 `--with-poll_module` 和 `--without-poll_module` 來啟用或禁用這個模塊。
- **kqueue** - 高效的方法,使用于 FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 和 MacOS X. 使用雙處理器的MacOS X系統使用kqueue可能會造成內核崩潰。
- **epoll** - 高效的方法,使用于Linux內核2.6版本及以后的系統。在某些發行版本中,如SuSE 8.2, 有讓2.4版本的內核支持epoll的補丁。
- **rtsig** - 可執行的實時信號,使用于Linux內核版本2.2.19以后的系統。默認情況下整個系統中不能出現大于1024個POSIX實時(排隊)信號。這種情況對于高負載的服務器來說是低效的;所以有必要通過調節內核參數 `/proc/sys/kernel/rtsig-max` 來增加隊列的大小。可是從Linux內核版本2.6.6-mm2開始, 這個參數就不再使用了,并且對于每個進程有一個獨立的信號隊列,這個隊列的大小可以用 RLIMIT_SIGPENDING 參數調節。當這個隊列過于擁塞,nginx就放棄它并且開始使用 `poll` 方法來處理連接直到恢復正常。
- **/dev/poll** - 高效的方法,使用于 Solaris 7 11/99+, HP/UX 11.22+ (eventport), IRIX 6.5.15+ 和 Tru64 UNIX 5.1A+.
- **eventport** - 高效的方法,使用于 Solaris 10. 為了防止出現內核崩潰的問題, 有必要安裝 [這個](http://sunsolve.sun.com/search/document.do?assetkey=1-26-102485-1 "http://sunsolve.sun.com/search/document.do?assetkey=1-26-102485-1") 安全補丁。
### 參考
[Hash表原始文檔](http://sysoev.ru/nginx/docs/hash.html "http://sysoev.ru/nginx/docs/hash.html")
- 主要文檔
- Nginx功能概述
- 為什么選擇Nginx
- Nginx安裝
- 運行和控制Nginx
- 配置符號參考
- 優化 Nginx
- 常見問題(FAQ)
- 調試 nginx
- 核心模塊
- Nginx主模塊
- Nginx事件模塊
- 基本模塊
- http核心模塊
- HttpIndex模塊
- HttpAccess模塊
- HttpAuthBasic模塊
- HttpAutoindex模塊
- Browser模塊
- Charset模塊
- HttpEmptyGif模塊
- HttpFcgi模塊
- Geo模塊
- HttpGzip模塊
- HttpHeaders模塊
- HttpIndex模塊
- HttpReferer模塊
- HttpLimit zone
- HttpLimitReqest模塊
- HttpLog模塊
- map
- Memcached
- HttpProxy模塊
- HttpRewrite模塊
- HttpSSI模塊
- HttpUserId
- 其他模塊
- Addition模塊
- EmbeddedPerl
- flv
- HttpGzipStatic
- RandomIndex
- HttpGeoIP
- HttpRealIp
- HttpSSL
- StubStatus模塊
- HttpSubstitution
- HttpDav模塊
- GooglePerftools
- HttpXSLT
- HttpSecureLink
- HttpImageFilter
- mail模塊
- MailCore
- MailAuth
- MailProxy
- MailSSL
- 安裝
- nginx在windows上的安裝
- nginx在freebsd上的安裝
- nginx在ubuntu上的安裝
- nginx在fedora上的安裝
- nginx php-fpm安裝配置
- 配置示例和方法
- 完整例子
- 完整例子2
- 虛擬主機
- 負載均衡
- nginx防盜鏈
- HWLoadbalancerCheckErrors