APC - 調整 apc.mmap_file_mask
將 APC 配置為 PHP 的操作碼記憶體時,有一個名為 apc.mmap_file_mask 的配置設置。根據我的閱讀,您可以通過三種方式對其進行配置,但我並不真正了解每種方式的含義。
- /tmp/apc.XXXXXX -(預設)“文件支持的 mmap”
- /tmp/apc.shm.XXXXXX - 使用“POSIX 風格的 shm_open/mmap”
- /dev/zero - “使用核心的 /dev/zero 介面連接匿名 mmap 記憶體”
來源: http: //php.net/manual/en/apc.configuration.php#ini.apc.mmap-file-mask
任何人都可以評論這些以及他們推薦的內容嗎?我猜會有記憶體使用和性能影響,也許還有安全影響,但我不知道是不是這樣?從我完成的閱讀中,我假設 #2 和 #3 更快,但我認為 APC 已經按原樣使用共享記憶體(由 apc.shm_size 設置),所以我不明白。
/tmp/apc.XXXXXX -> 這個 mmap 文件遮罩是一個普通的基於文件系統的 mmap,它使用 mkstemp 創建一個獨特的臨時文件,該文件是 mmap 的。6 個“X”被唯一的字元串替換,以使文件名唯一。這只是將數據寫入文件系統中的文件。
/tmp/apc.shm.XXXXXX -> 請注意,在 Linux 系統上它_必須_只能是 /apc.shm.XXXXXX。與直接文件支持的 mmap 的區別在於此機制通過 mktemp() 呼叫創建一個臨時文件,並呼叫 shm_open()*創建並打開一個新的或打開現有的 POSIX 共享記憶體對象。POSIX 共享記憶體對象實際上是一個句柄,不相關的程序可以使用它來映射共享記憶體的同一區域。*我以前沒有嘗試過,但我認為它最少可以有 3 個“X”(所以 apc.shml.XXX 也應該可以工作)。
/dev/zero -> mmap’ing
/dev/zero
是一個匿名記憶體映射,這意味著它的記憶體對像沒有關聯文件並且所有內容都初始化為零。如果您不指定 mmap_file_mask,APC 將使用匿名映射(帶有標誌 MAP_SHARED 和 MAP_ANON)。因此,指定/dev/zero
和不指定 mmap_file_mask 在它們都是匿名映射的意義上是等效的。從歷史上看,Linux 中的 MAP_SHARED 和 MAP_ANON 在核心版本 2.4 之前是不支持的。性能方面,3 將做得最好,因為文件支持的 mmap’ing 具有相當多的磁碟 I/O。因此,3 必須是最快的,因為它沒有備份文件並且是實際記憶體本身的一部分,最後是 2 和 1。然而,這只是跨越各種配置的理論和實踐基準可以證明現實。但是,匿名映射(和共享記憶體映射)的缺點是 mmap 的記憶體在應用程序執行之間不是持久的,因此在重新啟動時會失去記憶體。