From 24f4f91bd7e010b9ece4db726e81517a6b5e65ed Mon Sep 17 00:00:00 2001 From: Carla Schroder Date: Wed, 30 Sep 2015 12:17:05 -0700 Subject: [PATCH] updates and corrections to caching page --- .../caching_configuration.rst | 132 ++++++++---------- .../configuration_server/images/cache-1.png | Bin 0 -> 28789 bytes 2 files changed, 58 insertions(+), 74 deletions(-) create mode 100644 admin_manual/configuration_server/images/cache-1.png diff --git a/admin_manual/configuration_server/caching_configuration.rst b/admin_manual/configuration_server/caching_configuration.rst index 5a1eee662..2e97f9799 100644 --- a/admin_manual/configuration_server/caching_configuration.rst +++ b/admin_manual/configuration_server/caching_configuration.rst @@ -4,18 +4,19 @@ Configuring Memory Caching You can significantly improve your ownCloud server performance with memory caching, where frequently-requested objects are stored in memory for faster -retrieval. There are two types of caches to use: PHP opcache, and data caching -for your Web server. If you do not install a memcache you will see a warning on -your ownCloud admin page. (A memcache is not required and you may ignore the warning if you prefer.) +retrieval. There are two types of caches to use: a PHP opcode cache, which is +commonly called *opcache*, and data caching for your Web server. If you do not +install a memcache you will see a warning on your ownCloud admin page. (A +memcache is not required and you may ignore the warning if you prefer.) A PHP opcache stores compiled PHP scripts so they don't need to be re-compiled -every time they are called. PHP bundles an opcache since version 5.5, so you -don't need to install or configure it. +every time they are called. PHP bundles the Zend OPcache in core since version +5.5, so you don't need to install an opcache. If you are using PHP 5.4, which is the oldest supported PHP version for ownCloud, you may install the Alternative PHP Cache (APC). This is both an opcache and data cache. APC has not been updated since 2012 and is essentially -dead, and PHP 5.4 is very old and lags far behind later releases. If it is possible +dead, and PHP 5.4 is old and lags behind later releases. If it is possible to upgrade to a later PHP release that is the best option. Data caching is supplied by the Alternative PHP Cache, user (APCu) in PHP @@ -51,24 +52,11 @@ APC APC is only for systems running PHP 5.4 and older. The oldest supported PHP version in ownCloud is 5.4. -.. note:: RHEL 6 and CentOS 6 ship with PHP 5.3. See :doc:`php_54_installation`. +.. note:: RHEL 6 and CentOS 6 ship with PHP 5.3 and must be upgraded to PHP + 5.4 to run ownCloud. See :doc:`php_54_installation`. -This example installs APC on Red Hat/CentOS/Fedora systems running PHP 5.4:: - - yum install php-pecl-apc - -This example install APC on Debian/Ubuntu/Mint systems running PHP 5.4:: - - apt-get install php-apc - -After installing APC you must restart your Web server. This example restarts -Apache on Red Hat/CentOS/Fedora systems:: - - systemctl restart httpd.service - -This example restarts Apache on Debian/Ubuntu/Mint systems:: - - service apache2 restart +On Red Hat/CentOS/Fedora systems running PHP 5.4, install ``php-pecl-apc``. On +Debian/Ubuntu/Mint systems install ``php-apc``. Then restart your Web server. After restarting your Web server, add this line to your ``config.php`` file:: @@ -79,25 +67,12 @@ Refresh your ownCloud admin page, and the cache warning should disappear. APCu ---- -PHP 5.5 and up includes an opcache, so you don't need to install or configure -it. However, it does not bundle a data cache. APCu is a data cache, and it is -available in most Linux distributions. This example installs APCu on Red -Hat/CentOS/Fedora systems running PHP 5.5 and up:: - - yum install php-pecl-apcu - -This example install APC on Debian/Ubuntu/Mint systems running PHP 5.5 and up:: - - apt-get install php5-apcu - -After installing APCu you must restart your Web server. This example restarts -Apache on Red Hat/CentOS/Fedora systems:: - - systemctl restart httpd.service - -This example restarts Apache on Debian/Ubuntu/Mint systems:: - - service apache2 restart +PHP 5.5 and up includes the Zend OPcache in core, and on most Linux +distributions it is enabled by default. However, it does +not bundle a data cache. APCu is a data cache, and it is available in most +Linux distributions. On Red Hat/CentOS/Fedora systems running PHP 5.5 and up +install ``php-pecl-apcu``. On Debian/Ubuntu/Mint systems install ``php5-apcu``. +Then restart your Web server. After restarting your Web server, add this line to your ``config.php`` file:: @@ -105,6 +80,22 @@ After restarting your Web server, add this line to your ``config.php`` file:: Refresh your ownCloud admin page, and the cache warning should disappear. +.. finish this later. too vexing to bother with now. +.. Enabling PHP opcache +.. ^^^^^^^^^^^^^^^^^^^^ +.. +.. Use :ref:`label-phpinfo` to see if your PHP opcache is already enabled by +.. searching for ``opcache.enable``. If it says ``on`` then it is enabled and +.. you don't need to do anything. Figure 1 is from Linux Mint 17; the Zend +.. OPcache is enabled by default and ``phpinfo`` displays status and statistics. +.. +.. .. figure:: images/cache-1.png +.. :alt: The Zend OPcache section displays opcode cache status and statistics. +.. +.. *Figure 1: Zend OPcache status in phpinfo* +.. +.. If it is not enabled, then go into + Memcached --------- @@ -114,25 +105,23 @@ with :doc:`Transactional File Locking <../configuration_files/files_locking_tran store locks, and data can disappear from the cache at any time (Redis is the best for this). -Setting up Memcached is easy. This example shows how to install it on -Debian/Ubuntu/Mint:: +Setting up Memcached is easy. On Debian/Ubuntu/Mint install ``memcached`` and +``php5-memcached``. The installer will automatically start ``memcached`` and +configure it to launch at startup. - apt-get install memcached php5-memcached - -This example shows how to install and launch it on Red Hat/CentOS/Fedora:: - - yum install memcached php-pecl-memcached - systemctl enable memcached - systemctl start memcached +On Red Hat/CentOS/Fedora install ``memcached`` and +``php-pecl-memcached``. It will not start automatically, so you must use +your service manager to start ``memcached``, and to launch it at boot as a +daemon. -You can verify that the Memcached daemon is running with ``ps``:: +You can verify that the Memcached daemon is running with ``ps ax``:: - ps ax |grep memcached + ps ax | grep memcached 19563 ? Sl 0:02 /usr/bin/memcached -m 64 -p 11211 -u memcache -l 127.0.0.1 Then add the appropriate entries to your ``config.php``. This example uses APCu -for the local cache, Memcached as the distributed memcache, and all the +for the local cache, Memcached as the distributed memcache, and lists all the servers in the shared cache pool with their port numbers:: 'memcache.local' => '\OC\Memcache\Memcached', @@ -150,39 +139,34 @@ Redis is an excellent modern memcache to use for both distributed caching, and with :doc:`Transactional File Locking <../configuration_files/files_locking_transactional>` because it guarantees that cached objects are available for as long as they are needed. -This example shows how to install it on Debian/Ubuntu/Mint:: +On Debian/Ubuntu/Mint install ``redis-server`` and ``php5-redis``. The installer +will automatically launch ``redis-server`` and configure it to launch at +startup. - apt-get install redis-server php5-redis - -This example shows how to install and launch it on Red Hat/CentOS/Fedora:: - - yum install redis php-pecl-redis - systemctl enable redis - systemctl start redis +On Red Hat/CentOS/Fedora install ``redis`` and ``php-pecl-redis``. It will not +start automatically, so you must use your service manager to start +``memcached``, and to launch it at boot as a daemon. -You can verify that the redis daemon is running with ``ps``:: - +You can verify that the Redis daemon is running with ``ps ax``:: + + ps ax | grep redis 22203 ? Ssl 0:00 /usr/bin/redis-server 127.0.0.1:6379 This example ``config.php`` configuration uses APCu for the local server cache, -and sets up three distributed servers:: +and sets up three servers in the shared cache pool:: 'memcache.local' => '\OC\Memcache\APCu', 'memcache.distributed' => '\OC\Memcache\Redis', 'redis' => array( 'host' => 'localhost', // optionally, use a Unix socket - //'host' => '/tmp/redis.sock', + // 'host' => '/tmp/redis.sock', + 'host' => 'server1.example.com', + 'host' => 'server2.example.com', 'port' => 6379, 'timeout' => 0.0, - ), - - 'memcached_servers' => array( - array('localhost', 6379), - array('server.example.com', 6379), - array('server2.example.com', 6379), - ), - + ), + Redis is very configurable; consult `the Redis documentation `_ to learn more. Cache Directory Location diff --git a/admin_manual/configuration_server/images/cache-1.png b/admin_manual/configuration_server/images/cache-1.png new file mode 100644 index 0000000000000000000000000000000000000000..ea0f4930315502ee614abf0b1ce94bc85e2a66f9 GIT binary patch literal 28789 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