{"id":2482,"date":"2025-03-24T08:47:11","date_gmt":"2025-03-23T23:47:11","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=2482"},"modified":"2025-03-24T08:47:41","modified_gmt":"2025-03-23T23:47:41","slug":"%e3%80%90%e4%bf%9d%e5%ad%98%e7%89%88%e3%80%91php%e3%81%aeopcache%e3%82%92%e5%ae%8c%e5%85%a8%e7%90%86%e8%a7%a3%ef%bc%81%e8%a8%ad%e5%ae%9a%e3%83%bb%e3%83%81%e3%83%a5%e3%83%bc%e3%83%8b%e3%83%b3%e3%82%b0","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=2482","title":{"rendered":"\u3010\u4fdd\u5b58\u7248\u3011PHP\u306eOPCache\u3092\u5b8c\u5168\u7406\u89e3\uff01\u8a2d\u5b9a\u30fb\u30c1\u30e5\u30fc\u30cb\u30f3\u30b0\u30fb\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u307e\u3067\u5fb9\u5e95\u89e3\u8aac"},"content":{"rendered":"\n<div class=\"toc\"><br \/>\n<b>Warning<\/b>:  Undefined array key \"is_admin\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>116<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_category_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>121<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>128<\/b><br \/>\n    <div id=\"toc_container\" class=\"sgb-toc--bullets js-smooth-scroll\" data-dialog-title=\"\u76ee\u6b21\">\n      <p class=\"toc_title\">\u76ee\u6b21 <\/p>\n      <ul class=\"toc_list\">  <li class=\"first\">    <a href=\"#i-0\">OPCache\u3068\u306f\uff1f\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u304c\u5287\u7684\u306b\u5411\u4e0a\u3059\u308b\u4ed5\u7d44\u307f\u3092\u89e3\u8aac<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-1\">PHP\u30b3\u30fc\u30c9\u306e\u5b9f\u884c\u30d7\u30ed\u30bb\u30b9\u3068OPCache\u306e\u5f79\u5272<\/a>      <\/li>      <li>        <a href=\"#i-2\">OPCache\u306b\u3088\u308b\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u5411\u4e0a\u306e\u4ed5\u7d44\u307f<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-3\">\u5b9f\u969b\u306e\u51e6\u7406\u901f\u5ea6\u6539\u5584\u52b9\u679c\u3092\u691c\u8a3c<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-4\">OPCache\u306e\u5c0e\u5165\u3068\u57fa\u672c\u8a2d\u5b9a\u30ac\u30a4\u30c9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-5\">PHP7\/8\u3067\u306eOPCache\u6709\u52b9\u5316\u624b\u9806<\/a>      <\/li>      <li>        <a href=\"#i-6\">\u4e3b\u8981\u306a\u8a2d\u5b9a\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u610f\u5473\u3068\u63a8\u5968\u5024<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-7\">\u74b0\u5883\u5225\u306e\u6700\u9069\u306a\u8a2d\u5b9a\u5024\u306e\u9078\u629e<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-8\">\u5b9f\u8df5\u7684\u306aOPCache\u30c1\u30e5\u30fc\u30cb\u30f3\u30b0\u624b\u6cd5<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-9\">\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u6700\u9069\u5316\u30c6\u30af\u30cb\u30c3\u30af<\/a>      <\/li>      <li>        <a href=\"#i-10\">\u30ad\u30e3\u30c3\u30b7\u30e5\u30d2\u30c3\u30c8\u7387\u3092\u9ad8\u3081\u308b\u30b3\u30c4<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-11\">\u672c\u756a\u74b0\u5883\u3067\u306e\u5b89\u5b9a\u904b\u7528\u306e\u305f\u3081\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-12\">OPCache\u306e\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u3068\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-13\">\u30ad\u30e3\u30c3\u30b7\u30e5\u72b6\u614b\u306e\u78ba\u8a8d\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-14\">\u3088\u304f\u3042\u308b\u554f\u984c\u3068\u89e3\u6c7a\u65b9\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-15\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u4f4e\u4e0b\u6642\u306e\u30c7\u30d0\u30c3\u30b0\u624b\u9806<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-16\">PHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u306eOPCache\u6d3b\u7528\u8853<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-17\">Laravel\/Symfony\u3067\u306e\u52b9\u679c\u7684\u306a\u8a2d\u5b9a\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-18\">\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u5225\u306e\u6ce8\u610f\u70b9\u3068\u6700\u9069\u5316\u30c6\u30af\u30cb\u30c3\u30af<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-19\">\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306e\u6210\u529f\u4e8b\u4f8b<\/a>      <\/li>    <\/ul>  <\/li><\/ul>\n      <a href=\"#\" class=\"sgb-toc-button js-toc-button\" rel=\"nofollow\" data-open-dialog=\"true\"><i class=\"fa fa-list\"><\/i><span class=\"sgb-toc-button__text\">\u76ee\u6b21\u3078<\/span><\/a>\n    <\/div><\/div><h2 class=\"wp-block-heading\" id=\"i-0\">OPCache\u3068\u306f\uff1f\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u304c\u5287\u7684\u306b\u5411\u4e0a\u3059\u308b\u4ed5\u7d44\u307f\u3092\u89e3\u8aac<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-1\">PHP\u30b3\u30fc\u30c9\u306e\u5b9f\u884c\u30d7\u30ed\u30bb\u30b9\u3068OPCache\u306e\u5f79\u5272<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">PHP\u306e\u5b9f\u884c\u30d7\u30ed\u30bb\u30b9\u3092\u7406\u89e3\u3059\u308b\u3053\u3068\u306f\u3001OPCache\u306e\u91cd\u8981\u6027\u3092\u628a\u63e1\u3059\u308b\u4e0a\u3067\u4e0d\u53ef\u6b20\u3067\u3059\u3002\u901a\u5e38\u306ePHP\u306e\u5b9f\u884c\u30d7\u30ed\u30bb\u30b9\u3068OPCache\u3092\u4f7f\u7528\u3057\u305f\u5834\u5408\u3092\u6bd4\u8f03\u3057\u306a\u304c\u3089\u89e3\u8aac\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u901a\u5e38\u306ePHP\u5b9f\u884c\u30d7\u30ed\u30bb\u30b9\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>PHP\u30b9\u30af\u30ea\u30d7\u30c8\u306e\u8aad\u307f\u8fbc\u307f\uff08\u30d5\u30a1\u30a4\u30ebI\/O\uff09<\/li>\n\n\n\n<li>\u5b57\u53e5\u89e3\u6790\uff08\u30c8\u30fc\u30af\u30f3\u5316\uff09<\/li>\n\n\n\n<li>\u69cb\u6587\u89e3\u6790\uff08\u30d1\u30fc\u30b9\uff09<\/li>\n\n\n\n<li>\u30b3\u30f3\u30d1\u30a4\u30eb\uff08\u30aa\u30da\u30b3\u30fc\u30c9\u306e\u751f\u6210\uff09<\/li>\n\n\n\n<li>\u5b9f\u884c<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u306e\u30d7\u30ed\u30bb\u30b9\u306f\u3001\u30ea\u30af\u30a8\u30b9\u30c8\u3054\u3068\u306b\u6bce\u56de\u5b9f\u884c\u3055\u308c\u308b\u305f\u3081\u3001\u7279\u306b\u30d5\u30a1\u30a4\u30ebI\/O\u3068\u30b3\u30f3\u30d1\u30a4\u30eb\u306e\u90e8\u5206\u3067\u5927\u304d\u306a\u30aa\u30fc\u30d0\u30fc\u30d8\u30c3\u30c9\u304c\u767a\u751f\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>OPCache\u3092\u4f7f\u7528\u3057\u305f\u5b9f\u884c\u30d7\u30ed\u30bb\u30b9\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u521d\u56de\u5b9f\u884c\u6642\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>PHP\u30b9\u30af\u30ea\u30d7\u30c8\u306e\u8aad\u307f\u8fbc\u307f<\/li>\n\n\n\n<li>\u30b3\u30f3\u30d1\u30a4\u30eb\uff08\u30aa\u30da\u30b3\u30fc\u30c9\u751f\u6210\uff09<\/li>\n\n\n\n<li>\u30aa\u30da\u30b3\u30fc\u30c9\u306e\u30e1\u30e2\u30ea\u3078\u306e\u4fdd\u5b58<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>2\u56de\u76ee\u4ee5\u964d\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30e1\u30e2\u30ea\u304b\u3089\u30aa\u30da\u30b3\u30fc\u30c9\u3092\u76f4\u63a5\u8aad\u307f\u8fbc\u307f<\/li>\n\n\n\n<li>\u5b9f\u884c<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-2\">OPCache\u306b\u3088\u308b\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u5411\u4e0a\u306e\u4ed5\u7d44\u307f<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">OPCache\u306f\u4ee5\u4e0b\u306e3\u3064\u306e\u4e3b\u8981\u306a\u30e1\u30ab\u30cb\u30ba\u30e0\u3067\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u5411\u4e0a\u3055\u305b\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30aa\u30da\u30b3\u30fc\u30c9\u30ad\u30e3\u30c3\u30b7\u30e5<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b3\u30f3\u30d1\u30a4\u30eb\u6e08\u307f\u306ePHP\u30b3\u30fc\u30c9\u3092\u30e1\u30e2\u30ea\u306b\u4fdd\u5b58<\/li>\n\n\n\n<li>\u30d5\u30a1\u30a4\u30ebI\/O\u3068\u30b3\u30f3\u30d1\u30a4\u30eb\u306e\u30aa\u30fc\u30d0\u30fc\u30d8\u30c3\u30c9\u3092\u524a\u6e1b<\/li>\n\n\n\n<li>\u5b9f\u884c\u6642\u306eCPU\u8ca0\u8377\u3092\u8efd\u6e1b<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30b9\u30af\u30ea\u30d7\u30c8\u30ad\u30e3\u30c3\u30b7\u30e5<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d5\u30a1\u30a4\u30eb\u306e\u5b58\u5728\u78ba\u8a8d\u3084\u6a29\u9650\u30c1\u30a7\u30c3\u30af\u306e\u7d50\u679c\u3092\u30ad\u30e3\u30c3\u30b7\u30e5<\/li>\n\n\n\n<li>\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092\u6700\u5c0f\u9650\u306b\u6291\u5236<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5171\u6709\u30e1\u30e2\u30ea\u306e\u6d3b\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8907\u6570\u306ePHP\u30d7\u30ed\u30bb\u30b9\u9593\u3067\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u5171\u6709<\/li>\n\n\n\n<li>\u30e1\u30e2\u30ea\u4f7f\u7528\u52b9\u7387\u306e\u6700\u9069\u5316<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u5b9f\u88c5\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ OPCache\u306e\u72b6\u614b\u78ba\u8a8d\n$status = opcache_get_status();\n$configuration = opcache_get_configuration();\n\n\/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u30d2\u30c3\u30c8\u7387\u306e\u8a08\u7b97\n$hitRate = $status['opcache_statistics']['hits'] \/ \n          ($status['opcache_statistics']['hits'] + $status['opcache_statistics']['misses']) * 100;\n\n\/\/ \u30e1\u30e2\u30ea\u4f7f\u7528\u7387\u306e\u8a08\u7b97\n$memoryUsage = $status['memory_usage']['used_memory'] \/ \n               $status['memory_usage']['total_memory'] * 100;<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-3\">\u5b9f\u969b\u306e\u51e6\u7406\u901f\u5ea6\u6539\u5584\u52b9\u679c\u3092\u691c\u8a3c<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u5b9f\u969b\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306e\u51e6\u7406\u901f\u5ea6\u306e\u6539\u5584\u52b9\u679c\u3092\u691c\u8a3c\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002\u4ee5\u4e0b\u306f\u3001\u4e00\u822c\u7684\u306aWeb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306e\u6e2c\u5b9a\u7d50\u679c\u3067\u3059\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u30c6\u30b9\u30c8\u74b0\u5883\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>PHP 8.1<\/li>\n\n\n\n<li>Apache 2.4<\/li>\n\n\n\n<li>16GB RAM<\/li>\n\n\n\n<li>SSD Storage<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u6e2c\u5b9a\u7d50\u679c\uff1a<\/strong><\/p>\n\n\n<div id=\"id-dd9841e3-bf10-4667-90b6-61dab1c3cd4a\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30b7\u30ca\u30ea\u30aa<\/th><th>OPCache\u7121\u52b9<\/th><th>OPCache\u6709\u52b9<\/th><th>\u6539\u5584\u7387<\/th><\/tr><\/thead><tbody><tr><td>\u5358\u7d14\u306aPHP\u5b9f\u884c<\/td><td>2.5ms<\/td><td>0.8ms<\/td><td>68%<\/td><\/tr><tr><td>WordPress\u30c8\u30c3\u30d7\u30da\u30fc\u30b8<\/td><td>180ms<\/td><td>85ms<\/td><td>53%<\/td><\/tr><tr><td>Laravel \u30a2\u30d7\u30ea<\/td><td>150ms<\/td><td>65ms<\/td><td>57%<\/td><\/tr><tr><td>Symfony\u30a2\u30d7\u30ea<\/td><td>165ms<\/td><td>70ms<\/td><td>58%<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">\u3053\u306e\u7d50\u679c\u304b\u3089\u3001OPCache\u306e\u5c0e\u5165\u306b\u3088\u308a\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5358\u7d14\u306aPHP\u30b9\u30af\u30ea\u30d7\u30c8\u3067\u6700\u592768%\u306e\u9ad8\u901f\u5316<\/li>\n\n\n\n<li>\u5b9f\u969b\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306750-60%\u7a0b\u5ea6\u306e\u51e6\u7406\u901f\u5ea6\u6539\u5584<\/li>\n\n\n\n<li>\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u6700\u9069\u5316\u306b\u3088\u308b\u5168\u4f53\u7684\u306a\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u5411\u4e0a<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u304c\u78ba\u8a8d\u3067\u304d\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u30d9\u30f3\u30c1\u30de\u30fc\u30af\u30b3\u30fc\u30c9\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u51e6\u7406\u6642\u9593\u8a08\u6e2c\u306e\u5b9f\u88c5\u4f8b\nfunction measureExecutionTime($callback) {\n    \/\/ \u30de\u30a4\u30af\u30ed\u79d2\u5358\u4f4d\u3067\u306e\u958b\u59cb\u6642\u9593\n    $start = microtime(true);\n\n    \/\/ \u51e6\u7406\u306e\u5b9f\u884c\n    $callback();\n\n    \/\/ \u5b9f\u884c\u6642\u9593\u306e\u8a08\u7b97\uff08\u30df\u30ea\u79d2\uff09\n    $executionTime = (microtime(true) - $start) * 1000;\n\n    return $executionTime;\n}\n\n\/\/ \u4f7f\u7528\u4f8b\n$time = measureExecutionTime(function() {\n    \/\/ \u6e2c\u5b9a\u3057\u305f\u3044\u51e6\u7406\u3092\u3053\u3053\u306b\u8a18\u8ff0\n    require_once 'large_application.php';\n});\n\necho \"\u5b9f\u884c\u6642\u9593: {$time}ms\";<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u4ee5\u4e0a\u306e\u7d50\u679c\u304b\u3089\u3001OPCache\u306fPHP\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u5287\u7684\u306b\u5411\u4e0a\u3055\u305b\u308b\u91cd\u8981\u306a\u6a5f\u80fd\u3067\u3042\u308b\u3053\u3068\u304c\u5206\u304b\u308a\u307e\u3059\u3002\u7279\u306b\u5927\u898f\u6a21\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3084\u9ad8\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u306eWeb\u30b5\u30a4\u30c8\u3067\u306f\u3001\u5fc5\u9808\u306e\u6700\u9069\u5316\u624b\u6cd5\u3068\u8a00\u3048\u308b\u3067\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-4\">OPCache\u306e\u5c0e\u5165\u3068\u57fa\u672c\u8a2d\u5b9a\u30ac\u30a4\u30c9<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-5\">PHP7\/8\u3067\u306eOPCache\u6709\u52b9\u5316\u624b\u9806<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">OPCache\u306e\u5c0e\u5165\u306f\u3001PHP\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3084\u5b9f\u884c\u74b0\u5883\u306b\u3088\u3063\u3066\u7570\u306a\u308a\u307e\u3059\u3002\u4ee5\u4e0b\u306b\u74b0\u5883\u5225\u306e\u8a73\u7d30\u306a\u624b\u9806\u3092\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>1. PHP 7.x\/8.x\u3067\u306e\u6709\u52b9\u5316\uff08Linux\u74b0\u5883\uff09<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># PHP-FPM\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u5834\u5408\nsudo apt-get install php-opcache  # Debian\/Ubuntu\nsudo yum install php-opcache      # CentOS\/RHEL\n\n# php.ini\u306e\u8a2d\u5b9a\nzend_extension=opcache.so\nopcache.enable=1\nopcache.enable_cli=1  # CLI\u74b0\u5883\u3067\u3082\u6709\u52b9\u5316\u3059\u308b\u5834\u5408<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>2. Windows\u74b0\u5883\u3067\u306e\u6709\u52b9\u5316<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">; php.ini\u306e\u8a2d\u5b9a\nzend_extension=php_opcache.dll\nopcache.enable=1<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>3. \u5c0e\u5165\u78ba\u8a8d\u65b9\u6cd5<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ PHP\u306e\u60c5\u5831\u30da\u30fc\u30b8\u3067\u78ba\u8a8d\nphpinfo();\n\n\/\/ \u307e\u305f\u306f\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u3067\u78ba\u8a8d\nif (function_exists('opcache_get_status')) {\n    echo \"OPCache is enabled\";\n} else {\n    echo \"OPCache is not available\";\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-6\">\u4e3b\u8981\u306a\u8a2d\u5b9a\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u610f\u5473\u3068\u63a8\u5968\u5024<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">OPCache\u306e\u52d5\u4f5c\u3092\u6700\u9069\u5316\u3059\u308b\u305f\u3081\u306e\u4e3b\u8981\u306a\u8a2d\u5b9a\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u89e3\u8aac\u3057\u307e\u3059\uff1a<\/p>\n\n\n<div id=\"id-ac3b282f-db0e-4811-81de-eaa032a30b56\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30d1\u30e9\u30e1\u30fc\u30bf\u540d<\/th><th>\u8aac\u660e<\/th><th>\u63a8\u5968\u5024<\/th><th>\u5f71\u97ff<\/th><\/tr><\/thead><tbody><tr><td>opcache.memory_consumption<\/td><td>\u30ad\u30e3\u30c3\u30b7\u30e5\u306b\u4f7f\u7528\u3059\u308b\u30e1\u30e2\u30ea\u30b5\u30a4\u30ba\uff08MB\uff09<\/td><td>128-512<\/td><td>\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u3068\u30ad\u30e3\u30c3\u30b7\u30e5\u53ef\u80fd\u306a\u30b9\u30af\u30ea\u30d7\u30c8\u6570<\/td><\/tr><tr><td>opcache.max_accelerated_files<\/td><td>\u30ad\u30e3\u30c3\u30b7\u30e5\u53ef\u80fd\u306a\u6700\u5927\u30b9\u30af\u30ea\u30d7\u30c8\u6570<\/td><td>10000<\/td><td>\u30ad\u30e3\u30c3\u30b7\u30e5\u53ef\u80fd\u306a\u30d5\u30a1\u30a4\u30eb\u6570\u306e\u4e0a\u9650<\/td><\/tr><tr><td>opcache.revalidate_freq<\/td><td>\u30d5\u30a1\u30a4\u30eb\u66f4\u65b0\u30c1\u30a7\u30c3\u30af\u306e\u9593\u9694\uff08\u79d2\uff09<\/td><td>2-60<\/td><td>\u958b\u767a\u74b0\u5883:0, \u672c\u756a\u74b0\u5883:60<\/td><\/tr><tr><td>opcache.validate_timestamps<\/td><td>\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u306b\u3088\u308b\u66f4\u65b0\u30c1\u30a7\u30c3\u30af\u306e\u6709\u52b9\u5316<\/td><td>\u958b\u767a:1, \u672c\u756a:0<\/td><td>\u30d5\u30a1\u30a4\u30eb\u5909\u66f4\u306e\u691c\u77e5\u65b9\u6cd5<\/td><\/tr><tr><td>opcache.interned_strings_buffer<\/td><td>\u6587\u5b57\u5217\u306e\u683c\u7d0d\u306b\u4f7f\u7528\u3059\u308b\u30e1\u30e2\u30ea\u30b5\u30a4\u30ba\uff08MB\uff09<\/td><td>8-16<\/td><td>\u6587\u5b57\u5217\u306e\u6700\u9069\u5316\u30ec\u30d9\u30eb<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">\u8a2d\u5b9a\u4f8b\uff08php.ini\uff09\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">; \u57fa\u672c\u8a2d\u5b9a\nopcache.enable=1\nopcache.enable_cli=1\n\n; \u30e1\u30e2\u30ea\u8a2d\u5b9a\nopcache.memory_consumption=128\nopcache.interned_strings_buffer=8\nopcache.max_accelerated_files=10000\nopcache.max_wasted_percentage=10\n\n; \u691c\u8a3c\u8a2d\u5b9a\nopcache.validate_timestamps=1\nopcache.revalidate_freq=2\n\n; \u6700\u9069\u5316\u8a2d\u5b9a\nopcache.optimization_level=0x7FFFBFFF\nopcache.file_update_protection=2<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-7\">\u74b0\u5883\u5225\u306e\u6700\u9069\u306a\u8a2d\u5b9a\u5024\u306e\u9078\u629e<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u5404\u74b0\u5883\u306b\u5fdc\u3058\u305f\u63a8\u5968\u8a2d\u5b9a\u3092\u3054\u7d39\u4ecb\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u958b\u767a\u74b0\u5883\u5411\u3051\u8a2d\u5b9a<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">; \u958b\u767a\u74b0\u5883\u3067\u306f\u983b\u7e41\u306a\u30d5\u30a1\u30a4\u30eb\u66f4\u65b0\u306b\u5bfe\u5fdc\nopcache.validate_timestamps=1\nopcache.revalidate_freq=0\nopcache.memory_consumption=128\nopcache.max_accelerated_files=10000<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u672c\u756a\u74b0\u5883\u5411\u3051\u8a2d\u5b9a<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">; \u672c\u756a\u74b0\u5883\u3067\u306f\u5b89\u5b9a\u6027\u3068\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u91cd\u8996\nopcache.validate_timestamps=0\nopcache.memory_consumption=256\nopcache.max_accelerated_files=20000\nopcache.interned_strings_buffer=16\nopcache.fast_shutdown=1<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u5927\u898f\u6a21\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u5411\u3051\u8a2d\u5b9a<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">; \u5927\u898f\u6a21\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306f\u30e1\u30e2\u30ea\u3068\u30d5\u30a1\u30a4\u30eb\u6570\u3092\u5897\u3084\u3059\nopcache.memory_consumption=512\nopcache.max_accelerated_files=50000\nopcache.interned_strings_buffer=32\nopcache.huge_code_pages=1<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u8a2d\u5b9a\u5024\u306e\u78ba\u8a8d\u30b3\u30fc\u30c9\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u73fe\u5728\u306e\u8a2d\u5b9a\u5024\u3092\u78ba\u8a8d\nfunction checkOpcacheSettings() {\n    $config = opcache_get_configuration();\n    $directives = $config['directives'];\n\n    $important_settings = [\n        'opcache.enable',\n        'opcache.memory_consumption',\n        'opcache.max_accelerated_files',\n        'opcache.revalidate_freq',\n        'opcache.validate_timestamps'\n    ];\n\n    foreach ($important_settings as $setting) {\n        echo \"$setting: \" . $directives[$setting] . \"\\n\";\n    }\n}\n\n\/\/ \u4f7f\u7528\u4f8b\ncheckOpcacheSettings();<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u8a2d\u5b9a\u5909\u66f4\u5f8c\u306f\u5fc5\u305aPHP\u30d7\u30ed\u30bb\u30b9\u306e\u518d\u8d77\u52d5\u304c\u5fc5\u8981\u3067\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># PHP-FPM\u306e\u518d\u8d77\u52d5\nsudo systemctl restart php-fpm\n\n# Apache\u306e\u5834\u5408\nsudo systemctl restart apache2<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u4ee5\u4e0a\u306e\u8a2d\u5b9a\u306b\u3088\u308a\u3001\u74b0\u5883\u306b\u5fdc\u3058\u305f\u6700\u9069\u306aOPCache\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002\u5b9f\u969b\u306e\u904b\u7528\u3067\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u898f\u6a21\u3084\u8981\u4ef6\u306b\u5fdc\u3058\u3066\u9069\u5b9c\u8abf\u6574\u3092\u884c\u3063\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-8\">\u5b9f\u8df5\u7684\u306aOPCache\u30c1\u30e5\u30fc\u30cb\u30f3\u30b0\u624b\u6cd5<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-9\">\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u6700\u9069\u5316\u30c6\u30af\u30cb\u30c3\u30af<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">OPCache\u306e\u30e1\u30e2\u30ea\u4f7f\u7528\u3092\u6700\u9069\u5316\u3059\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u591a\u304f\u306e\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u30ad\u30e3\u30c3\u30b7\u30e5\u3057\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>1. \u30e1\u30e2\u30ea\u4f7f\u7528\u72b6\u6cc1\u306e\u5206\u6790<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">function analyzeOpcacheMemory() {\n    $status = opcache_get_status();\n    $memory = $status['memory_usage'];\n\n    \/\/ \u30e1\u30e2\u30ea\u4f7f\u7528\u7387\u306e\u8a08\u7b97\n    $usedMemoryPercentage = ($memory['used_memory'] \/ $memory['total_memory']) * 100;\n    $wastedMemoryPercentage = ($memory['wasted_memory'] \/ $memory['total_memory']) * 100;\n\n    return [\n        'total_memory' =&gt; formatBytes($memory['total_memory']),\n        'used_memory' =&gt; formatBytes($memory['used_memory']),\n        'used_percentage' =&gt; round($usedMemoryPercentage, 2),\n        'wasted_memory' =&gt; formatBytes($memory['wasted_memory']),\n        'wasted_percentage' =&gt; round($wastedMemoryPercentage, 2)\n    ];\n}\n\nfunction formatBytes($bytes) {\n    return round($bytes \/ 1024 \/ 1024, 2) . ' MB';\n}\n\n\/\/ \u4f7f\u7528\u4f8b\n$memoryStats = analyzeOpcacheMemory();\nprint_r($memoryStats);<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>2. \u30e1\u30e2\u30ea\u6700\u9069\u5316\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/strong><\/p>\n\n\n<div id=\"id-71e84dd5-feca-4dcf-9c94-ab457ab4708e\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u6700\u9069\u5316\u9805\u76ee<\/th><th>\u5b9f\u88c5\u65b9\u6cd5<\/th><th>\u671f\u5f85\u52b9\u679c<\/th><\/tr><\/thead><tbody><tr><td>\u30b9\u30af\u30ea\u30d7\u30c8\u6570\u306e\u5236\u5fa1<\/td><td>\u4e0d\u8981\u306a\u30d5\u30a1\u30a4\u30eb\u3092\u9664\u5916<\/td><td>\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u524a\u6e1b<\/td><\/tr><tr><td>\u6587\u5b57\u5217\u30a4\u30f3\u30bf\u30fc\u30f3<\/td><td>interned_strings_buffer\u306e\u8abf\u6574<\/td><td>\u6587\u5b57\u5217\u306e\u91cd\u8907\u6392\u9664<\/td><\/tr><tr><td>\u5927\u898f\u6a21\u30da\u30fc\u30b8<\/td><td>huge_code_pages=1\u306e\u8a2d\u5b9a<\/td><td>\u30e1\u30e2\u30ea\u30a2\u30af\u30bb\u30b9\u306e\u6700\u9069\u5316<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">\u8a2d\u5b9a\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">; \u30e1\u30e2\u30ea\u6700\u9069\u5316\u8a2d\u5b9a\nopcache.memory_consumption=256\nopcache.interned_strings_buffer=16\nopcache.max_wasted_percentage=5\nopcache.huge_code_pages=1<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-10\">\u30ad\u30e3\u30c3\u30b7\u30e5\u30d2\u30c3\u30c8\u7387\u3092\u9ad8\u3081\u308b\u30b3\u30c4<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u30ad\u30e3\u30c3\u30b7\u30e5\u30d2\u30c3\u30c8\u7387\u306e\u5411\u4e0a\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306b\u76f4\u7d50\u3057\u307e\u3059\u3002\u4ee5\u4e0b\u306b\u5177\u4f53\u7684\u306a\u6539\u5584\u624b\u6cd5\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>1. \u30d2\u30c3\u30c8\u7387\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u5b9f\u88c5<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">function getOpcacheHitRate() {\n    $status = opcache_get_status();\n    $stats = $status['opcache_statistics'];\n\n    $hitRate = $stats['hits'] \/ ($stats['hits'] + $stats['misses']) * 100;\n\n    return [\n        'hits' =&gt; $stats['hits'],\n        'misses' =&gt; $stats['misses'],\n        'hit_rate' =&gt; round($hitRate, 2),\n        'num_cached_scripts' =&gt; $stats['num_cached_scripts'],\n        'max_cached_keys' =&gt; $stats['max_cached_keys']\n    ];\n}\n\n\/\/ \u4f7f\u7528\u4f8b\n$hitRateStats = getOpcacheHitRate();\necho \"\u30ad\u30e3\u30c3\u30b7\u30e5\u30d2\u30c3\u30c8\u7387: {$hitRateStats['hit_rate']}%\\n\";<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>2. \u30ad\u30e3\u30c3\u30b7\u30e5\u30d2\u30c3\u30c8\u7387\u5411\u4e0a\u306e\u305f\u3081\u306e\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d5\u30a1\u30a4\u30eb\u306e\u5b58\u5728\u78ba\u8a8d<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">function checkCachedFiles() {\n    $status = opcache_get_status();\n    $scripts = $status['scripts'];\n\n    foreach ($scripts as $script) {\n        if (!file_exists($script['full_path'])) {\n            opcache_invalidate($script['full_path']);\n        }\n    }\n}<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d7\u30ea\u30ed\u30fc\u30c9\u6a5f\u80fd\u306e\u6d3b\u7528\uff08PHP 7.4\u4ee5\u4e0a\uff09<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ preload.php\nfunction preloadClasses() {\n    $classes = [\n        '\/path\/to\/app\/Models\/User.php',\n        '\/path\/to\/app\/Services\/AuthService.php'\n    ];\n\n    foreach ($classes as $class) {\n        require_once $class;\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-11\">\u672c\u756a\u74b0\u5883\u3067\u306e\u5b89\u5b9a\u904b\u7528\u306e\u305f\u3081\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u5b9f\u904b\u7528\u74b0\u5883\u3067OPCache\u3092\u6700\u5927\u9650\u6d3b\u7528\u3059\u308b\u305f\u3081\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3092\u3054\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>1. \u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u6226\u7565<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30c7\u30d7\u30ed\u30a4\u6642\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u30af\u30ea\u30a2\u51e6\u7406\nfunction clearOpcacheOnDeploy() {\n    \/\/ \u65e2\u5b58\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u7121\u52b9\u5316\n    opcache_reset();\n\n    \/\/ \u91cd\u8981\u30d5\u30a1\u30a4\u30eb\u306e\u5f37\u5236\u30d7\u30ea\u30ed\u30fc\u30c9\n    $core_files = [\n        'config\/app.php',\n        'routes\/web.php',\n        'app\/Kernel.php'\n    ];\n\n    foreach ($core_files as $file) {\n        opcache_compile_file($file);\n    }\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>2. \u5b89\u5b9a\u904b\u7528\u306e\u305f\u3081\u306e\u30c1\u30a7\u30c3\u30af\u30dd\u30a4\u30f3\u30c8<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">function checkOpcacheHealth() {\n    $status = opcache_get_status();\n    $stats = $status['opcache_statistics'];\n\n    $warnings = [];\n\n    \/\/ \u30e1\u30e2\u30ea\u4f7f\u7528\u7387\u30c1\u30a7\u30c3\u30af\n    if (($status['memory_usage']['used_memory'] \/ $status['memory_usage']['total_memory']) &gt; 0.9) {\n        $warnings[] = \"\u30e1\u30e2\u30ea\u4f7f\u7528\u7387\u304c90%\u3092\u8d85\u3048\u3066\u3044\u307e\u3059\";\n    }\n\n    \/\/ \u518d\u8d77\u52d5\u30ab\u30a6\u30f3\u30c8\u30c1\u30a7\u30c3\u30af\n    if ($stats['oom_restarts'] &gt; 0) {\n        $warnings[] = \"\u30e1\u30e2\u30ea\u4e0d\u8db3\u306b\u3088\u308b\u518d\u8d77\u52d5\u304c\u767a\u751f\u3057\u3066\u3044\u307e\u3059\";\n    }\n\n    \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u30d2\u30c3\u30c8\u7387\u30c1\u30a7\u30c3\u30af\n    $hitRate = $stats['hits'] \/ ($stats['hits'] + $stats['misses']) * 100;\n    if ($hitRate &lt; 80) {\n        $warnings[] = \"\u30ad\u30e3\u30c3\u30b7\u30e5\u30d2\u30c3\u30c8\u7387\u304c80%\u3092\u4e0b\u56de\u3063\u3066\u3044\u307e\u3059\";\n    }\n\n    return $warnings;\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>3. \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u306e\u5b9f\u88c5\u4f8b<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">function monitorOpcachePerformance() {\n    $metrics = [\n        'memory' =&gt; analyzeOpcacheMemory(),\n        'hit_rate' =&gt; getOpcacheHitRate(),\n        'health_checks' =&gt; checkOpcacheHealth()\n    ];\n\n    \/\/ \u30e1\u30c8\u30ea\u30af\u30b9\u306e\u4fdd\u5b58\u3084\u30a2\u30e9\u30fc\u30c8\u9001\u4fe1\n    if (!empty($metrics['health_checks'])) {\n        sendAlert($metrics['health_checks']);\n    }\n\n    \/\/ \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30ed\u30b0\u306e\u8a18\u9332\n    logPerformanceMetrics($metrics);\n}\n\n\/\/ \u5b9a\u671f\u5b9f\u884c\u7528\u306ecron\u30b8\u30e7\u30d6\u8a2d\u5b9a\u4f8b\n\/\/ *\/5 * * * * php \/path\/to\/monitor-opcache.php<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u308c\u3089\u306e\u6700\u9069\u5316\u624b\u6cd5\u3092\u9069\u5207\u306b\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001OPCache\u306e\u6027\u80fd\u3092\u6700\u5927\u9650\u306b\u5f15\u304d\u51fa\u3057\u3001\u5b89\u5b9a\u3057\u305f\u904b\u7528\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002\u305f\u3060\u3057\u3001\u5404\u8a2d\u5b9a\u5024\u306f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u7279\u6027\u3084\u8ca0\u8377\u72b6\u6cc1\u306b\u5fdc\u3058\u3066\u9069\u5207\u306b\u8abf\u6574\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-12\">OPCache\u306e\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u3068\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-13\">\u30ad\u30e3\u30c3\u30b7\u30e5\u72b6\u614b\u306e\u78ba\u8a8d\u65b9\u6cd5<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">OPCache\u306e\u72b6\u614b\u3092\u52b9\u679c\u7684\u306b\u76e3\u8996\u3059\u308b\u3053\u3068\u3067\u3001\u554f\u984c\u3092\u65e9\u671f\u306b\u767a\u898b\u3057\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u6700\u9069\u306b\u4fdd\u3064\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>1. \u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u306e\u5b9f\u88c5<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class OpcacheMonitor {\n    public function getStatus() {\n        if (!function_exists('opcache_get_status')) {\n            throw new RuntimeException('OPCache is not available');\n        }\n\n        $status = opcache_get_status();\n        $config = opcache_get_configuration();\n\n        return [\n            'memory_usage' =&gt; $this-&gt;analyzeMemoryUsage($status),\n            'statistics' =&gt; $this-&gt;analyzeStatistics($status),\n            'configuration' =&gt; $this-&gt;analyzeConfiguration($config)\n        ];\n    }\n\n    private function analyzeMemoryUsage($status) {\n        $memory = $status['memory_usage'];\n        return [\n            'used_memory' =&gt; $this-&gt;formatBytes($memory['used_memory']),\n            'free_memory' =&gt; $this-&gt;formatBytes($memory['free_memory']),\n            'wasted_memory' =&gt; $this-&gt;formatBytes($memory['wasted_memory']),\n            'current_wasted_percentage' =&gt; round($memory['current_wasted_percentage'], 2)\n        ];\n    }\n\n    private function analyzeStatistics($status) {\n        $stats = $status['opcache_statistics'];\n        $hitRate = $stats['hits'] \/ ($stats['hits'] + $stats['misses']) * 100;\n\n        return [\n            'num_cached_scripts' =&gt; $stats['num_cached_scripts'],\n            'hits' =&gt; $stats['hits'],\n            'misses' =&gt; $stats['misses'],\n            'hit_rate' =&gt; round($hitRate, 2),\n            'oom_restarts' =&gt; $stats['oom_restarts']\n        ];\n    }\n\n    private function formatBytes($bytes) {\n        return round($bytes \/ 1024 \/ 1024, 2) . ' MB';\n    }\n}\n\n\/\/ \u4f7f\u7528\u4f8b\n$monitor = new OpcacheMonitor();\n$status = $monitor-&gt;getStatus();<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>2. \u76e3\u8996\u30e1\u30c8\u30ea\u30af\u30b9\u306e\u8a2d\u5b9a<\/strong><\/p>\n\n\n<div id=\"id-8cd26c13-b087-4f29-8c4e-d6629e0d6a9f\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30e1\u30c8\u30ea\u30af\u30b9<\/th><th>\u8b66\u544a\u95be\u5024<\/th><th>\u5371\u967a\u95be\u5024<\/th><th>\u78ba\u8a8d\u983b\u5ea6<\/th><\/tr><\/thead><tbody><tr><td>\u30e1\u30e2\u30ea\u4f7f\u7528\u7387<\/td><td>80%<\/td><td>90%<\/td><td>5\u5206<\/td><\/tr><tr><td>\u30ad\u30e3\u30c3\u30b7\u30e5\u30d2\u30c3\u30c8\u7387<\/td><td>85%<\/td><td>75%<\/td><td>15\u5206<\/td><\/tr><tr><td>\u7121\u99c4\u30e1\u30e2\u30ea\u7387<\/td><td>15%<\/td><td>25%<\/td><td>30\u5206<\/td><\/tr><tr><td>OOM\u30ea\u30b9\u30bf\u30fc\u30c8\u6570<\/td><td>1\u56de\/\u65e5<\/td><td>3\u56de\/\u65e5<\/td><td>1\u6642\u9593<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"i-14\">\u3088\u304f\u3042\u308b\u554f\u984c\u3068\u89e3\u6c7a\u65b9\u6cd5<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>1. \u30e1\u30e2\u30ea\u95a2\u9023\u306e\u554f\u984c<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class OpcacheMemoryAnalyzer {\n    public function diagnoseMemoryIssues() {\n        $status = opcache_get_status();\n        $memory = $status['memory_usage'];\n        $issues = [];\n\n        \/\/ \u30e1\u30e2\u30ea\u4f7f\u7528\u7387\u30c1\u30a7\u30c3\u30af\n        if (($memory['used_memory'] \/ ($memory['used_memory'] + $memory['free_memory'])) &gt; 0.9) {\n            $issues[] = [\n                'type' =&gt; 'high_memory_usage',\n                'description' =&gt; '\u30e1\u30e2\u30ea\u4f7f\u7528\u7387\u304c90%\u3092\u8d85\u3048\u3066\u3044\u307e\u3059',\n                'solution' =&gt; 'opcache.memory_consumption\u306e\u5024\u3092\u5897\u3084\u3059\u3053\u3068\u3092\u691c\u8a0e\u3057\u3066\u304f\u3060\u3055\u3044'\n            ];\n        }\n\n        \/\/ \u30e1\u30e2\u30ea\u65ad\u7247\u5316\u30c1\u30a7\u30c3\u30af\n        if ($memory['current_wasted_percentage'] &gt; 20) {\n            $issues[] = [\n                'type' =&gt; 'memory_fragmentation',\n                'description' =&gt; '\u30e1\u30e2\u30ea\u306e\u65ad\u7247\u5316\u304c\u767a\u751f\u3057\u3066\u3044\u307e\u3059',\n                'solution' =&gt; 'opcache.max_wasted_percentage\u306e\u8abf\u6574\u307e\u305f\u306fOPCache\u306e\u518d\u8d77\u52d5\u3092\u691c\u8a0e\u3057\u3066\u304f\u3060\u3055\u3044'\n            ];\n        }\n\n        return $issues;\n    }\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>2. \u30ad\u30e3\u30c3\u30b7\u30e5\u7121\u52b9\u5316\u306e\u554f\u984c<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class OpcacheInvalidationChecker {\n    public function checkInvalidationIssues() {\n        $status = opcache_get_status();\n        $stats = $status['opcache_statistics'];\n\n        \/\/ \u30d5\u30a1\u30a4\u30eb\u5909\u66f4\u306b\u3088\u308b\u7121\u52b9\u5316\u304c\u983b\u7e41\u306b\u767a\u751f\u3057\u3066\u3044\u306a\u3044\u304b\u30c1\u30a7\u30c3\u30af\n        if ($stats['blacklist_misses'] &gt; 100) {\n            return [\n                'type' =&gt; 'frequent_invalidation',\n                'description' =&gt; '\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u7121\u52b9\u5316\u304c\u983b\u7e41\u306b\u767a\u751f\u3057\u3066\u3044\u307e\u3059',\n                'solution' =&gt; [\n                    'validate_timestamps\u306e\u8a2d\u5b9a\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044',\n                    '\u30d5\u30a1\u30a4\u30eb\u66f4\u65b0\u306e\u983b\u5ea6\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044',\n                    'opcache.revalidate_freq\u306e\u8abf\u6574\u3092\u691c\u8a0e\u3057\u3066\u304f\u3060\u3055\u3044'\n                ]\n            ];\n        }\n\n        return null;\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-15\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u4f4e\u4e0b\u6642\u306e\u30c7\u30d0\u30c3\u30b0\u624b\u9806<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>1. \u30b7\u30b9\u30c6\u30de\u30c6\u30a3\u30c3\u30af\u306a\u30c7\u30d0\u30c3\u30b0\u30a2\u30d7\u30ed\u30fc\u30c1<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class OpcacheDebugger {\n    public function performSystemCheck() {\n        $checks = [\n            'memory' =&gt; $this-&gt;checkMemoryStatus(),\n            'cache_hit_rate' =&gt; $this-&gt;checkHitRate(),\n            'file_status' =&gt; $this-&gt;checkFileStatus(),\n            'configuration' =&gt; $this-&gt;checkConfiguration()\n        ];\n\n        return array_filter($checks);\n    }\n\n    private function checkMemoryStatus() {\n        $status = opcache_get_status();\n        $memory = $status['memory_usage'];\n\n        if ($memory['current_wasted_percentage'] &gt; 20) {\n            return [\n                'level' =&gt; 'warning',\n                'message' =&gt; '\u30e1\u30e2\u30ea\u306e\u65ad\u7247\u5316\u304c\u691c\u51fa\u3055\u308c\u307e\u3057\u305f',\n                'action' =&gt; 'opcache_reset()\u306e\u5b9f\u884c\u3092\u691c\u8a0e\u3057\u3066\u304f\u3060\u3055\u3044'\n            ];\n        }\n\n        return null;\n    }\n\n    private function checkHitRate() {\n        $status = opcache_get_status();\n        $stats = $status['opcache_statistics'];\n        $hitRate = $stats['hits'] \/ ($stats['hits'] + $stats['misses']) * 100;\n\n        if ($hitRate &lt; 80) {\n            return [\n                'level' =&gt; 'warning',\n                'message' =&gt; '\u30ad\u30e3\u30c3\u30b7\u30e5\u30d2\u30c3\u30c8\u7387\u304c\u4f4e\u4e0b\u3057\u3066\u3044\u307e\u3059',\n                'action' =&gt; '\u30ad\u30e3\u30c3\u30b7\u30e5\u30b5\u30a4\u30ba\u3068\u30d5\u30a1\u30a4\u30eb\u6570\u306e\u8a2d\u5b9a\u3092\u898b\u76f4\u3057\u3066\u304f\u3060\u3055\u3044'\n            ];\n        }\n\n        return null;\n    }\n}\n\n\/\/ \u30c7\u30d0\u30c3\u30b0\u5b9f\u884c\u4f8b\n$debugger = new OpcacheDebugger();\n$issues = $debugger-&gt;performSystemCheck();<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>2. \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u4f4e\u4e0b\u6642\u306e\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30e1\u30e2\u30ea\u4f7f\u7528\u72b6\u6cc1\u306e\u78ba\u8a8d<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">function checkMemoryUtilization() {\n    $status = opcache_get_status();\n    $memory = $status['memory_usage'];\n\n    echo \"\u4f7f\u7528\u4e2d\u30e1\u30e2\u30ea: \" . ($memory['used_memory'] \/ 1024 \/ 1024) . \"MB\\n\";\n    echo \"\u7a7a\u304d\u30e1\u30e2\u30ea: \" . ($memory['free_memory'] \/ 1024 \/ 1024) . \"MB\\n\";\n    echo \"\u65ad\u7247\u5316\u7387: \" . $memory['current_wasted_percentage'] . \"%\\n\";\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u30ad\u30e3\u30c3\u30b7\u30e5\u52b9\u7387\u306e\u5206\u6790<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">function analyzeCacheEfficiency() {\n    $status = opcache_get_status();\n    $stats = $status['opcache_statistics'];\n\n    $efficiency = [\n        'cached_scripts' =&gt; $stats['num_cached_scripts'],\n        'hits' =&gt; $stats['hits'],\n        'misses' =&gt; $stats['misses'],\n        'hit_rate' =&gt; ($stats['hits'] \/ ($stats['hits'] + $stats['misses'])) * 100,\n        'blacklist_count' =&gt; $stats['blacklist_misses']\n    ];\n\n    return $efficiency;\n}<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>\u30b7\u30b9\u30c6\u30e0\u30ed\u30b0\u306e\u89e3\u6790<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">function analyzeOpcacheLogs() {\n    $logFile = '\/var\/log\/php-fpm\/error.log';\n    if (file_exists($logFile)) {\n        $logs = shell_exec(\"grep 'opcache' $logFile | tail -n 50\");\n        return parseOpcacheErrors($logs);\n    }\n    return [];\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u308c\u3089\u306e\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u3068\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u624b\u6cd5\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001OPCache\u306e\u554f\u984c\u3092\u65e9\u671f\u306b\u767a\u898b\u3057\u3001\u52b9\u679c\u7684\u306b\u89e3\u6c7a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u5b9a\u671f\u7684\u306a\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u3068\u30d7\u30ed\u30a2\u30af\u30c6\u30a3\u30d6\u306a\u5bfe\u5fdc\u304c\u3001\u5b89\u5b9a\u3057\u305f\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u7dad\u6301\u3059\u308b\u305f\u3081\u306e\u9375\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-16\">PHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u306eOPCache\u6d3b\u7528\u8853<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-17\">Laravel\/Symfony\u3067\u306e\u52b9\u679c\u7684\u306a\u8a2d\u5b9a\u65b9\u6cd5<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u30e2\u30c0\u30f3PHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067OPCache\u3092\u6700\u5927\u9650\u6d3b\u7528\u3059\u308b\u305f\u3081\u306e\u8a2d\u5b9a\u3068\u5b9f\u88c5\u65b9\u6cd5\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>1. Laravel\u3067\u306e\u6700\u9069\u5316\u8a2d\u5b9a<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ config\/cache.php \u3067\u306e\u8a2d\u5b9a\nreturn [\n    'opcache' =&gt; [\n        'enabled' =&gt; env('OPCACHE_ENABLED', true),\n        'validate_timestamps' =&gt; env('OPCACHE_VALIDATE_TIMESTAMPS', false),\n        'revalidate_freq' =&gt; env('OPCACHE_REVALIDATE_FREQ', 0),\n    ],\n];\n\n\/\/ \u8a2d\u5b9a\u78ba\u8a8d\u7528\u306eArtisan\u30b3\u30de\u30f3\u30c9\nclass OpcacheStatusCommand extends Command {\n    protected $signature = 'opcache:status';\n\n    public function handle() {\n        if (!function_exists('opcache_get_status')) {\n            $this-&gt;error('OPCache is not available');\n            return;\n        }\n\n        $status = opcache_get_status();\n        $this-&gt;table(\n            ['Metric', 'Value'],\n            [\n                ['Memory Usage', $this-&gt;formatBytes($status['memory_usage']['used_memory'])],\n                ['Cache Hits', $status['opcache_statistics']['hits']],\n                ['Cache Hit Rate', round($this-&gt;calculateHitRate($status), 2) . '%'],\n                ['Cached Scripts', $status['opcache_statistics']['num_cached_scripts']]\n            ]\n        );\n    }\n\n    private function calculateHitRate($status) {\n        $stats = $status['opcache_statistics'];\n        return $stats['hits'] \/ ($stats['hits'] + $stats['misses']) * 100;\n    }\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Laravel\u30d7\u30ea\u30ed\u30fc\u30c9\u8a2d\u5b9a<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ preload.php\n&lt;?php\nrequire_once __DIR__ . '\/vendor\/autoload.php';\n\n$app = require_once __DIR__ . '\/bootstrap\/app.php';\n\n\/\/ \u983b\u7e41\u306b\u4f7f\u7528\u3055\u308c\u308b\u30b5\u30fc\u30d3\u30b9\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u306e\u30d7\u30ea\u30ed\u30fc\u30c9\n$providers = [\n    Illuminate\\Auth\\AuthServiceProvider::class,\n    Illuminate\\Database\\DatabaseServiceProvider::class,\n    App\\Providers\\RouteServiceProvider::class,\n];\n\nforeach ($providers as $provider) {\n    $app-&gt;register($provider);\n}\n\n\/\/ \u4e3b\u8981\u306a\u30e2\u30c7\u30eb\u306e\u30d7\u30ea\u30ed\u30fc\u30c9\n$models = [\n    App\\Models\\User::class,\n    App\\Models\\Post::class,\n];\n\nforeach ($models as $model) {\n    class_exists($model);\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>2. Symfony\u3067\u306e\u6700\u9069\u5316\u8a2d\u5b9a<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ config\/packages\/framework.yaml\nframework:\n    cache:\n        app: cache.adapter.opcache\n        system: cache.adapter.system\n\n\/\/ OPCache\u30d0\u30f3\u30c9\u30eb\u306e\u8a2d\u5b9a\nclass OpcacheBundle extends Bundle {\n    public function boot() {\n        $opcacheConfig = [\n            'enable' =&gt; true,\n            'memory_consumption' =&gt; 256,\n            'interned_strings_buffer' =&gt; 16,\n            'max_accelerated_files' =&gt; 20000,\n            'validate_timestamps' =&gt; false,\n            'revalidate_freq' =&gt; 0,\n        ];\n\n        if ($this-&gt;container-&gt;getParameter('kernel.environment') === 'dev') {\n            $opcacheConfig['validate_timestamps'] = true;\n            $opcacheConfig['revalidate_freq'] = 2;\n        }\n\n        ini_set('opcache.enable', $opcacheConfig['enable']);\n        \/\/ \u305d\u306e\u4ed6\u306e\u8a2d\u5b9a\u3082\u540c\u69d8\u306b\u9069\u7528\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-18\">\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u5225\u306e\u6ce8\u610f\u70b9\u3068\u6700\u9069\u5316\u30c6\u30af\u30cb\u30c3\u30af<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>1. Laravel\u3067\u306e\u6700\u9069\u5316\u30c6\u30af\u30cb\u30c3\u30af<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class OptimizeServiceProvider extends ServiceProvider {\n    public function boot() {\n        if ($this-&gt;app-&gt;environment('production')) {\n            \/\/ \u30eb\u30fc\u30c8\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\n            $this-&gt;app['router']-&gt;getRoutes()-&gt;refreshNameLookups();\n\n            \/\/ \u30d3\u30e5\u30fc\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\n            $this-&gt;app['view']-&gt;getFinder()-&gt;flush();\n\n            \/\/ \u30b3\u30f3\u30d5\u30a3\u30b0\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\n            $this-&gt;app['config']-&gt;set('app.config_cached', true);\n        }\n    }\n\n    public function register() {\n        $this-&gt;app-&gt;singleton('opcache.monitor', function ($app) {\n            return new OpcacheMonitor();\n        });\n    }\n}\n\nclass OpcacheMonitor {\n    public function getMetrics() {\n        return [\n            'memory' =&gt; $this-&gt;getMemoryMetrics(),\n            'cache' =&gt; $this-&gt;getCacheMetrics(),\n            'files' =&gt; $this-&gt;getFilesMetrics()\n        ];\n    }\n\n    private function getMemoryMetrics() {\n        $status = opcache_get_status();\n        return $status['memory_usage'];\n    }\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>2. Symfony\u3067\u306e\u6700\u9069\u5316\u30c6\u30af\u30cb\u30c3\u30af<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ src\/Cache\/OpcacheWarmer.php\nclass OpcacheWarmer implements CacheWarmerInterface {\n    private $kernel;\n\n    public function __construct(KernelInterface $kernel) {\n        $this-&gt;kernel = $kernel;\n    }\n\n    public function warmUp($cacheDir) {\n        $files = [\n            $this-&gt;kernel-&gt;getProjectDir() . '\/src\/Controller',\n            $this-&gt;kernel-&gt;getProjectDir() . '\/src\/Entity',\n            $this-&gt;kernel-&gt;getProjectDir() . '\/src\/Repository',\n        ];\n\n        foreach ($files as $dir) {\n            $this-&gt;preloadDirectory($dir);\n        }\n    }\n\n    private function preloadDirectory($dir) {\n        $iterator = new \\RecursiveIteratorIterator(\n            new \\RecursiveDirectoryIterator($dir)\n        );\n\n        foreach ($iterator as $file) {\n            if ($file-&gt;isFile() &amp;&amp; $file-&gt;getExtension() === 'php') {\n                opcache_compile_file($file-&gt;getRealPath());\n            }\n        }\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-19\">\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306e\u6210\u529f\u4e8b\u4f8b<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>1. \u5927\u898f\u6a21EC\u30b5\u30a4\u30c8\u3067\u306e\u5c0e\u5165\u4e8b\u4f8b<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u8a08\u6e2c\u7528\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\nclass OpcacheMetricsMiddleware {\n    private $startTime;\n    private $metrics = [];\n\n    public function handle($request, Closure $next) {\n        $this-&gt;startTime = microtime(true);\n\n        $response = $next($request);\n\n        $this-&gt;recordMetrics();\n\n        return $response;\n    }\n\n    private function recordMetrics() {\n        $executionTime = microtime(true) - $this-&gt;startTime;\n        $status = opcache_get_status();\n\n        $this-&gt;metrics[] = [\n            'timestamp' =&gt; time(),\n            'execution_time' =&gt; round($executionTime * 1000, 2),\n            'memory_used' =&gt; $status['memory_usage']['used_memory'],\n            'cache_hits' =&gt; $status['opcache_statistics']['hits']\n        ];\n\n        \/\/ \u30e1\u30c8\u30ea\u30af\u30b9\u306e\u4fdd\u5b58\u51e6\u7406\n        $this-&gt;saveMetrics();\n    }\n}\n\n\/\/ \u6700\u9069\u5316\u7d50\u679c\n$optimizationResults = [\n    'before' =&gt; [\n        'average_response_time' =&gt; 250, \/\/ \u30df\u30ea\u79d2\n        'memory_usage' =&gt; 128, \/\/ MB\n        'requests_per_second' =&gt; 100\n    ],\n    'after' =&gt; [\n        'average_response_time' =&gt; 120, \/\/ \u30df\u30ea\u79d2\n        'memory_usage' =&gt; 156, \/\/ MB\n        'requests_per_second' =&gt; 180\n    ]\n];<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u5c0e\u5165\u52b9\u679c\u306e\u6e2c\u5b9a\u7d50\u679c<\/strong><\/p>\n\n\n<div id=\"id-63a85bd2-a495-460f-8b58-38512d39f0be\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u6307\u6a19<\/th><th>\u6700\u9069\u5316\u524d<\/th><th>\u6700\u9069\u5316\u5f8c<\/th><th>\u6539\u5584\u7387<\/th><\/tr><\/thead><tbody><tr><td>\u5e73\u5747\u5fdc\u7b54\u6642\u9593<\/td><td>250ms<\/td><td>120ms<\/td><td>52%<\/td><\/tr><tr><td>\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf<\/td><td>128MB<\/td><td>156MB<\/td><td>-22%<\/td><\/tr><tr><td>\u79d2\u9593\u30ea\u30af\u30a8\u30b9\u30c8<\/td><td>100<\/td><td>180<\/td><td>80%<\/td><\/tr><tr><td>\u30ad\u30e3\u30c3\u30b7\u30e5\u30d2\u30c3\u30c8\u7387<\/td><td>65%<\/td><td>92%<\/td><td>42%<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">\u3053\u308c\u3089\u306e\u6700\u9069\u5316\u6280\u8853\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3092\u9069\u5207\u306b\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u30d9\u30fc\u30b9\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u3082\u9ad8\u3044\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002\u305f\u3060\u3057\u3001\u5b9f\u969b\u306e\u5c0e\u5165\u6642\u306b\u306f\u4ee5\u4e0b\u306e\u70b9\u306b\u6ce8\u610f\u304c\u5fc5\u8981\u3067\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u958b\u767a\u74b0\u5883\u3068\u672c\u756a\u74b0\u5883\u3067\u7570\u306a\u308b\u8a2d\u5b9a\u3092\u4f7f\u7528\u3059\u308b<\/li>\n\n\n\n<li>\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u30d7\u30ed\u30bb\u30b9\u306b\u30ad\u30e3\u30c3\u30b7\u30e5\u30af\u30ea\u30a2\u3092\u7d44\u307f\u8fbc\u3080<\/li>\n\n\n\n<li>\u5b9a\u671f\u7684\u306a\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u3092\u5b9f\u65bd\u3059\u308b<\/li>\n\n\n\n<li>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u6642\u306bOPCache\u8a2d\u5b9a\u3092\u898b\u76f4\u3059<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u308c\u3089\u306e\u70b9\u306b\u7559\u610f\u3057\u306a\u304c\u3089\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u7279\u6027\u306b\u5408\u308f\u305b\u3066\u9069\u5207\u306b\u8a2d\u5b9a\u3092\u8abf\u6574\u3059\u308b\u3053\u3068\u3067\u3001\u6700\u9069\u306a\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Warning: Undefined array key &#8220;is_admin&#8221; in \/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/ &#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12],"tags":[],"class_list":["post-2482","post","type-post","status-publish","format-standard","category-php","nothumb"],"_links":{"self":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2482","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2482"}],"version-history":[{"count":2,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2482\/revisions"}],"predecessor-version":[{"id":2484,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2482\/revisions\/2484"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2482"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2482"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2482"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}