2009-07-13 16 views
9

Powodem, dla którego pytam, jest to, że podczas korzystania z top nie widzę procesu dla czegoś takiego jak APC. Zakładam więc, że użycie pamięci zostanie uwzględnione w procesie apache.Skąd firma APC przechowuje kod operacyjny i pamięć podręczną zmiennych użytkownika?

Czy tak jest i czy to oznacza, że ​​pamięć APC jest używana, jest replikowana w każdym procesie apache, tym samym zabierając potencjalnie znacznie więcej pamięci niż to, co pierwotnie było do niej przypisane?

Czy w takim przypadku memcache byłoby lepszym rozwiązaniem, nawet jeśli nie jest używane na wielu serwerach z obciążeniem?

Odpowiedz

0

Oprócz pamięci podręcznej opcode, APC zapewnia również pamięć współdzieloną. Sugeruje to, że ma on swój własny system pamięci wewnętrznej podobny do memcached.

12

APC wykorzystuje pamięć współdzieloną do przechowywania pamięci podręcznej kodów opcode. W przypadku mod_php pamięć ta jest dzielona pomiędzy wszystkie procesy Apache. Tak więc pamięć podręczna o wielkości 30 MB zajmuje tylko 30 MB, nawet jeśli istnieje 5 procesów Apache.

Jednak przy użyciu mod_php każdy proces Apache'a marnuje wiele zasobów, ponieważ każdy proces zawiera interpreter PHP. Tak więc, gdy Apache obsługuje zawartość statyczną (html, css, js, pliki obrazów, itp.), Używa procesu z pełnym załadowanym interpreterem PHP. Aby ominąć to, niektórzy ludzie używają FastCGI przez mod_fastcgi lub mod_fcgi. Using an opcode cache with FastCGI staje się nieco trudniejsze.

Obecnie nie ma możliwości użycia memcache jako pamięci podręcznej kodu. Nawet gdyby tak było, prawdopodobnie byłby wolniejszy niż pożądany.