PDA

View Full Version : توضیحاتی راجب OpCache



Yousha
پنج شنبه 30 شهریور 1396, 16:53 عصر
توضیحاتی درباره اکستنشن OpCache:

اگر تنظیم opcache.validate_timestamps فعال و به تنظیم opcache.revalidate_freq هم مقدار داده بشه، درصورت تغییر فایلهای PHP تون، سیستم OpCache اونهارو تازه (invalidate) قلمداد میکنه و کش قدیمی مربوط به اون فایلهای تغییر یافته رو در قسمت shared memory حافظه(shm)، کهنه علامت گذاری میکنه.

http://barnamenevis.org/image/webp;base64,UklGRn4CAABXRUJQVlA4THICAAAvFAAFEF/lsI0kReqehaOQL vnhZl CsJhG0mKVHPMwX7kDEvdDts2ciR5w8f C/wWLv3u3c14/hUCCIAANBwA3u6u0NIQSsCe/8Pju2l5GOXU8iBbz5MwKcnWyyBbyEY9zXqS7fHbSckVBKTU0p8 rhFIouEK04AqzXlxhlNOsl5b XKGlIRReaQiFULh9Fph/rIO52ndRF6wHARAiuSvKBPQJNnVJRhijpWMtip sM063EadtR3KVo0LpXEmY7QM628aGy2X3l12HElVyhfEWw022u sIQArpaF QlpChstKSGYD2sxbCusm4JAQIgBEAIiDDwxxEgQIQIARAChvy/IEDkxzEECAERIkSIAPm9EAESsps3EqbDKOYNGG61fsx/lWik4nK3WRGS87azDuxgnZVREIaAIUBSB uBzgBRkiTT1lw 27Ztm/fZtm3btv32PuMv7/aeb4jovwK3jRo2ZvMMEqKBjY2NmYIko8w JCJfo0n48NSXyFbavMfD/d3tzavyfxch2/09nx7t7 1srq8s3iR5QDb/fTo9Ptjb3dpYXZqfnUpz5cH/9eyEW2zu8sLs9ORdmDGRZfo5GotZnJuZnBit8yUKeBGMRetsYm xkMFRP9XMBtrnGonQ2PjLUX BgFCfuyKK4DQ/0lXpZZIg7siiw/r4aP5N4tOWFqCKwvp5KH71w4bvmWlrBeruLXSnkAb/rNjkHrLsz1YScS8Bmm9knWFfbm5zU3/fcZibL6sE6shyJyCnxcgm C63Kh3h0z7yG7wKrfjckiG6RLZO4Y3uh1pSEaB2UUtHY1FCb/eWsJKlo5h0YHOhnq4JLEA==
اما متاسفانه سیستم OpCache کشهای کهنه(invalid) رو از حافظه shared memory تخلیه نمیکنه و فقط اونهارو wasted(تلف شده) علامت گذاری میکنه! و تنها زمانی که سیستم OpCache ریستارت بشه به میزان تنظیم opcache.memory_consumption حافظه shared memory تخلیه میشه، اون هم به 3 شرط: تجاوز از مقدار opcache.max_accelerated_files || مقدار opcache.memory_consumption && رسیدن به مقدار opcache.max_wasted_percentage. (به|| && دقت کنید)

هنگامی که کش wasted در حافظه به بیش از حد مجاز(opcache.max_wasted_percentage) برسه، OpCache خودکار ریستارت میشه، حافظه shared memory قفل میشه، segment کامل تخلیه میشه و نهایتاً قفل باز میشه. در این حالت وب سرور بکمک پروسس PHP بشدت مشغول تولید OpCode و cache کردن میشه تا حدی که پرفورمنس سرور افت میکنه یا حتی لحظاتی از دسترس خارج میشه و گاهاً cache slam رو بوجود میاره.

http://barnamenevis.org/image/webp;base64,UklGRqYCAABXRUJQVlA4TJoCAAAvFAAFEDflKp Ikxeqao0dfzwr6t8RvYeZQhONGkhQpe CYfufFWXH 27KMvdVuA7BtG8C9TT4gHyRTpvz/SH3AvYGYf4UAAiAADYcAP64uacviMyZCQdhvWXynSdo2ZT kbTOG5W03YqPCGJb3zRgWsuKH6ocx7DvPRgWXjMCokNaVS0IhJ C6JQ1xS/eSSsh qn9K6cklaNyH5r5uQhOQ9DnR swQWqcOdxiTtTbqcaBKghIx0JMoGw vURcmScboUO zv0BVQsuhrQE1KnL/ha7PTk3YUVC9RLmNYfwWDAIjU6SONJaxaqwzP1e5Ku1uQAYAgA EEAQBhsOAAZAAEBCALAaPsiA6CVw0gQABAQEJCg9QVIUMjeMRk FNaTs5nbpvVGXVENmVOLZWHUI0fD7u/Bk3BgPRs 4gw60Hv8XS0ACS9ZVUjKDBDUJLIOSAaJt26abU9u2bZupbcRGb dtmnF3jQ/Nu8g0R/VcYAERjls0Z5IC kZGRwe7kFF1iCkvbeLzqzzQfJxz 1v54dLC3s3Xd/Z/owNF/z2fHB/u7WxurS7eVqQyH/D6dnRzu721vri0vzOnqkjjIeT0/tdsAYHFuRntXHEAUVn/B2eBms9owq9Uoh7KIcl84G9wsZpPZAo1KIS3y9vy5ZGw2s9FgN EOtkIlbYv1rmYqwmvR6gwlKuUTUlR7awFSEzQwYzVBIxaKB7MA a5lzrsABm2G0iQW mdwl7LrgBNthtQn5nEhU sOcCwNj4U WBlNBht60szgEAZ5sef3clr /7jdWl VkA4GyTTXFEFF91xd1aAzC2vkziMKXxZm5Gq1Ywtv4PP2IwuWx Mq1FyFSda34LIASPyK3pGRocHm78SPMgZBmfkFeRlR3kyQxA=
بنابراین باید طوری OpCache رو تنظیم کنید و فایلهای PHP رو تغییر بدید که هرگز ظرفیت shared memory تون پر نشه... (مثلاً هنگام آپدیت کدها وب سرور رو خاموش کنید، از تابع opcache_reset() استفاده کنید یا کدهارو باهم و یکجا آپدیت کنید و...)

نکته: عمل allocation فضای کش در shared memory هنگامی انجام میشه که موتور PHP شروع به کار میکنه، پس اکستنشن OpCache سریعاً به میزان تنظیم opcache.memory_consumption فضایی رو در قسمت shared memory سیستم عامل رزرو میکنه(به مگابایت).
نکته 2: اکستنشن OpCache بهتره برای سرور واقعی(محیط production) استفاده بشه و نه محیط برنامه نویسی/development.
نکته 3: در حال حاضر کاملترین و قوی ترین سیستم cache اکستنشن opcache هستش که هم optimization و هم caching رو فراهم میکنه.
توجه: اگر از وبسرور IIS استفاده می کنید بهتره از اکستنشن WinCache استفاده کنید و نه OpCache.


http://bayanbox.ir/view/9093149751162814174/opcache-shared-memory.png


منبع (https://forum.iranphp.org/Thread-%D8%AA%D9%88%D8%B6%DB%8C%D8%AD%D8%A7%D8%AA%DB%8C-%D8%B1%D8%A7%D8%AC%D8%A8-OpCache)