Apache 性能最優(yōu)化分析(7)_Windows教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!
      有兩種實現(xiàn)這個特性的辦法:一是socket的SO_LINGER選項。但似乎是命中注定,在多數(shù)TCP/IP協(xié)議棧中它從來不能正確地實現(xiàn)。即使是在提供了正確實現(xiàn)的平臺(即Linux 2.0.31)上,這種方法也要比第二種方法代價(指CPU時間)高得多。

        大多數(shù)情況下,Apache在一個叫l(wèi)ingering_close的函數(shù)中實現(xiàn)了它(在 http_main.c)。這個函數(shù)大致如下所示:

      void lingering_close (int s)
      {
      char junk_buffer[2048];

      /* shutdown the sending side */
      shutdown (s, 1);

      signal (SIGALRM, lingering_death);
      alarm (30);

      for (;;) {
      select (s for reading, 2 second timeout);
      if (error) break;
      if (s is ready for reading) {
      read (s, junk_buffer, sizeof (junk_buffer));
      /* just toss away whatever is here */
      }
      }

      close (s);
      }

        這自然增加了連接結(jié)束時的開銷,但它是可靠的實現(xiàn)所必需的。隨著HTTP/1.1的日益盛行,所有連接都是持久的,這種開銷將被眾多的連接請求抵消。如果您想冒險禁止這一特性的話,可以定義宏NO_LINGCLOSE,但這顯然是不被推薦的。實際上,由于在HTTP/1.0中持久的管道式連接越來越普遍,lingering_close幾乎是必須的選擇。(管道式連接非常高效,所以您還是希望支持它的吧)

        5) 記分板文件

        Apache利用一種叫做記分板(scoreboard)的技術在父、子進程間通訊。它的理想實現(xiàn)是在共享內(nèi)存中。有的操作系統(tǒng)允許我們直接訪問共享內(nèi)存,或者提供它們的確切端口。在這些系統(tǒng)中的典型實現(xiàn)就是共享內(nèi)存記分板。其他的系統(tǒng)則將磁盤上的文件作為缺省實現(xiàn)。磁盤文件不僅低效而且不穩(wěn)定(又沒有什么優(yōu)勢)。請為您的操作系統(tǒng)仔細閱讀src/main/conf.h文件,并在其中尋找USE_MMAP_SCOREBOARD或者USE_SHMGET_SCOREBOARD。定義它們之一(以及相應的HAVE_MMAP和HAVE_SHMGET)將允許Apache使用共享內(nèi)存。如果您系統(tǒng)的內(nèi)存共享機制與眾不同,請編輯src/main/http_main.c并增加Apache所需的掛鉤函數(shù)(同時請把補丁寄給我們)

        注:直到1.2版,Apache的Linux版才開始使用共享內(nèi)存。這一疏忽使得以前版本的Apache在Linux上表現(xiàn)得很不理想。

        DYNAMIC_MODULE_LIMIT

        如果您不打算支持動態(tài)加載模塊的話(準備榨出最后一滴性能的您可能希望如此),編譯服務器時請設定參數(shù)-DDYNAMIC_MODULE_LIMIT=0。這將節(jié)省出為動態(tài)加載模塊而分配的內(nèi)存。

      來源:網(wǎng)絡搜集//所屬分類:Windows教程/更新時間:2013-04-15
      相關Windows教程