[Pkg-owncloud-commits] [owncloud-doc] 20/49: Add performance tips from master to stable7
David Prévot
taffit at moszumanska.debian.org
Thu Mar 12 02:06:47 UTC 2015
This is an automated email from the git hooks/post-receive script.
taffit pushed a commit to branch master
in repository owncloud-doc.
commit b31b7ebc7d92c30ffd6ecfb34ea63261bc3c2ab8
Author: RealRancor <Fisch.666 at gmx.de>
Date: Sun Feb 15 20:58:17 2015 +0100
Add performance tips from master to stable7
---
admin_manual/configuration/index.rst | 3 +-
admin_manual/configuration/performance_tips.rst | 264 ++++++++++++++++++++++++
2 files changed, 266 insertions(+), 1 deletion(-)
diff --git a/admin_manual/configuration/index.rst b/admin_manual/configuration/index.rst
index 1930281..75053ab 100644
--- a/admin_manual/configuration/index.rst
+++ b/admin_manual/configuration/index.rst
@@ -24,6 +24,7 @@ Configuration
language_configuration
logging_configuration
occ_command
+ performance_tips
previews_configuration
reverse_proxy_configuration
search_configuration
@@ -34,4 +35,4 @@ Configuration
user_auth_ldap
user_auth_ldap_cleanup
user_configuration
- reset_admin_password
\ No newline at end of file
+ reset_admin_password
diff --git a/admin_manual/configuration/performance_tips.rst b/admin_manual/configuration/performance_tips.rst
new file mode 100644
index 0000000..6d9f04f
--- /dev/null
+++ b/admin_manual/configuration/performance_tips.rst
@@ -0,0 +1,264 @@
+Performance Tips
+================
+
+The performance of ownCloud, like any `LAMP application <http://wikipedia.org/wiki/LAMP_%28software_bundle%29>`_,
+is dependent on all components of the stack.
+Maximizing performance can be achieved by optimizing the operations and interactions
+of the underlying network, hardware, operating systems, webservers, databases, and storage.
+
+This guide cannot cover all possible configurations and will instead
+cover tips that are specific to ownCloud or give the greatest benefit.
+
+SSL / Encryption App
+--------------------
+
+SSL (HTTPS) and file encryption/decryption can be offloaded to a processor's AES-NI extension.
+This can both speed up these operations while lowering processing overhead.
+This requires a processor with the `AES-NI instruction set <http://wikipedia.org/wiki/AES_instruction_set>`_.
+
+Here are some examples how to check if your CPU / environment supports the AES-NI extension:
+
+* | For each CPU core present: ``grep flags /proc/cpuinfo``
+ | or as a summary for all cores: ``grep -m 1 ^flags /proc/cpuinfo``
+ | If the result contains any ``aes``, the extension is present.
+ |
+
+* | On Windows you can run ``coreinfo`` from Sysinternals
+ | `Windows Sysinternals Download Coreinfo <https://technet.microsoft.com/en-us/sysinternals/cc835722.aspx>`_
+ | which gives you details of the processor and extensions present.
+ | Note: you may have to run the command shell as administrator to get an output.
+ |
+
+* | Search eg. on the Intel web if the processor used supports the extension
+ | `Intel Processor Feature Filter <http://ark.intel.com/MySearch.aspx?AESTech=true>`_
+ | You may set a filter by ``"AES New Instructions"`` to get a reduced result set.
+ |
+
+* | For versions of openssl >= 1.0.1, AES-NI does not work via an engine and will not show up in the ``openssl engine`` command. It is active by default on the supported hardware.
+ | You can check the openssl version via ``openssl version -a``
+ |
+
+* | If your processor supports AES-NI but it does not show up eg via grep or coreinfo, it is maybe disabled in the BIOS.
+ |
+
+* | If your environment runs virtualized, check the virtualization vendor for support.
+ |
+
+OPcache Extension
+-----------------
+
+OPcache improves PHP performance by storing precompiled script bytecode in shared memory,
+thereby removing the need for PHP to load and parse scripts on each request.
+This extension is bundled with PHP 5.5.0 and later, and is available in PECL for PHP versions 5.2, 5.3, and 5.4.
+
+Object Caching
+--------------
+
+ownCloud is written to take advantage of object caching.
+Object caching can be done locally with the APCu extension,
+or for distributed PHP environments using Memcached.
+Memcached servers must be specified in the "memcached_servers" array in ownCloud's config file.
+
+Enable the SPDY protocol
+------------------------
+
+Your webserver can be configured to use the SPDY protocol which could improve the overall performance of ownCloud.
+Please have a look at the documentation of your webservers module for more infos:
+
+* | `mod-spdy for Apache <https://code.google.com/p/mod-spdy/>`_
+ |
+
+* | `ngx_http_spdy_module for NginX <http://nginx.org/en/docs/http/ngx_http_spdy_module.html>`_
+ |
+
+.. note:: If you want to enable SPDY for Apache please note the `Known Issues <https://code.google.com/p/mod-spdy/wiki/KnownIssues>`_
+ of this module to avoid problems after enabling it.
+
+Serving static files via web server
+-----------------------------------
+
+See the section :doc:`serving_static_files_configuration` for a description and the benefits.
+
+Using cron to perform background jobs
+-------------------------------------
+
+See the section :doc:`background_jobs_configuration` for a description and the benefits.
+
+Using MySQL instead of SQLite
+-----------------------------
+
+MySQL or MariaDB should be preferred because of the `performance limitations of SQLite with highly concurrent applications <http://www.sqlite.org/whentouse.html>`_, like ownCloud.
+
+On large instances you could consider `running MySQLTuner <https://github.com/major/MySQLTuner-perl/>`_ to optimize the database.
+
+See the section :doc:`database_configuration` how to configure ownCloud for MySQL or MariaDB. If your installation is already running on
+SQLite then it is possible to convert to MySQL or MariaDB using the steps provided in :doc:`../maintenance/convert_db`.
+
+-----------------------------------
+
+Nginx: caching ownCloud gallery thumbnails with fastcgi_cache_purge
+-------------------------------------------------------------------
+
+| One of the optimisations for ownCloud when using Nginx as webserver is to combine FastCGI caching with "Cache Purge", a `3rdparty Nginx module <http://wiki.nginx.org/3rdPartyModules>`_ that adds the ability to purge content from `FastCGI`, `proxy`, `SCGI` and `uWSGI` caches. This mechanism speeds up thumbnail presentation as it shifts requests to Nginx and minimizes php invocations which else would take place for every thumbnail presented every time.
+| The following procedure is based on an Ubuntu 14.04 system. You may need to adopt it according your OS type and release.
+| **Note I:**
+| Unlike Apache, Nginx does not dynamically load modules. All modules needed, must be compiled into Nginx. This is one of the reasons for Nginx´s performance.
+| **Note II:**
+| It is expected to have an already running Nginx installation with a working configuration set up like described in the ownCloud documentation.
+
+Nginx module check
+~~~~~~~~~~~~~~~~~~
+| As a first step, it is necessary to check if your Nginx installation has the ``nginx cache purge`` module compiled in.
+|
+| ``nginx -V 2>&1 | grep ngx_cache_purge -o``
+|
+| If your output contains ``ngx_cache_purge``, you can continue with the configuration, else you need to manually compile Nginx with the module needed.
+
+Compile Nginx with the ``nginx-cache-purge`` module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+1. | *Preparation*
+ | ``cd /opt``
+ | ``wget http://nginx.org/keys/nginx_signing.key``
+ | ``sudo apt-key add nginx_signing.key``
+ | ``sudo vi /etc/apt/sources.list.d/nginx.list``
+ |
+ | Add following lines (in case, replace ``{trusty}`` by your distribution name):
+ | ``deb http://nginx.org/packages/mainline/ubuntu/ trusty nginx``
+ | ``deb -src http://nginx.org/packages/mainline/ubuntu/ trusty nginx``
+ |
+ | Then do a
+ | ``sudo apt-get update``
+ |
+ | **Note:**
+ | If you're not overly cautious and wish to install the latest and greatest Nginx packages and features, you may have to install Nginx from its mainline repository.
+ | From the Nginx homepage: "In general, you should deploy Nginx from its mainline branch at all times."
+ |
+ | If you would like to use standard Nginx from the latest mainline branch but without compiling in any additional modules, just run ``sudo apt-get install nginx``.
+ |
+
+2. | *Download the Nginx source from the ppa repository*
+ | ``cd /opt``
+ | ``sudo apt-get build-dep nginx``
+ | ``sudo apt-get source nginx``
+ |
+
+3. | *Download module(s) to be compiled in and configure compiler arguments*
+ | ``ls -la``
+ |
+ | Please replace ``{release}`` with the release downloaded
+ | ``cd /opt/nginx-{release}/debian``
+ |
+ | If folder "modules" is not present, do:
+ | ``sudo mkdir modules``
+ | ``cd modules``
+ | ``sudo git clone https://github.com/FRiCKLE/ngx_cache_purge.git``
+ | ``sudo vi /opt/nginx-{release}/debian/rules``
+ |
+ | If not present, add the following line at the top under ``#export DH_VERBOSE=1``:
+ | ``MODULESDIR = $(CURDIR)/debian/modules``
+ |
+ | And the end of `every` ``./configure`` command add:
+ | ``--add-module=$(MODULESDIR)/ngx_cache_purge``
+ |
+ | Don't forget to escape preceeding lines with a backslash ``\``.
+ | The parameters may now look :
+ | ``$(WITH_SPDY) \``
+ | ``--with-cc-opt="$(CFLAGS)" \``
+ | ``--with-ld-opt="$(LDFLAGS)" \``
+ | ``--with-ipv6 \``
+ | ``--add-module=$(MODULESDIR)/ngx_cache_purge``
+ |
+
+4. | *Compile and install Nginx*
+ | ``cd /opt/nginx-{release}``
+ | ``sudo dpkg-buildpackage -uc -b``
+ | ``ls -la /opt``
+ | ``sudo dpkg --install /opt/nginx_{release}~{distribution}_amd64.deb``
+ |
+
+5. | *Check if the compilation and installation of the* ``ngx_cache_purge`` *module was successful*
+ | ``nginx -V 2>&1 | grep ngx_cache_purge -o``
+ |
+ | It should show now: ``ngx_cache_purge``
+ |
+ | Show Nginx version including all features compiled and installed:
+ | ``nginx -V 2>&1 | sed s/" --"/"\n\t--"/g``
+ |
+
+6. | *Mark Nginx to be blocked from further updates via* ``apt-get``
+ | ``sudo dpkg --get-selections | grep nginx``
+ |
+ | For eyery nginx component listed do a:
+ | ``sudo apt-mark hold <component>``
+ |
+
+7. | *Regular checks for nginx updates*
+ | Do a regular visit on the `Nginx news page <http://nginx.org>`_ and proceed in case of updates with item 2 to 5
+
+Configure Nginx with the ``nginx-cache-purge`` module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+1. | *Preparation*
+ | Create a directory where Nginx will save the cached thumbnails. Use any path that fits to your environment. Replace ``{path}`` with the path used, example path below:
+ | ``sudo mkdir -p /usr/local/tmp/cache``
+ |
+
+2. | *Configuration*
+ | ``sudo vi /etc/nginx/sites-enabled/{your-ownCloud-nginx-config-file}``
+ |
+ | Note: the ``keys_zone`` / ``fastcgi_cache`` name and the ``{path}`` must be unique to each instance of ownCloud serverd with Nginx !
+ |
+ | Add at the *beginning*, but *outside* the ``server{}`` block:
+ | ``fastcgi_cache_path {path} levels=1:2 keys_zone=OWNCLOUD:100m inactive=60m;``
+ |
+ | Add *inside* the ``server{}`` block, as an example of a configuration:
+ |
+ | ``set $skip_cache 1;``
+ |
+ | ``# POST requests and urls with a query string should always go to PHP``
+ | ``if ($request_uri ~* "thumbnail.php") {``
+ | ``set $skip_cache 0;``
+ | ``}``
+ |
+ | ``fastcgi_cache_key "$scheme$request_method$host$request_uri";``
+ | ``fastcgi_cache_use_stale error timeout invalid_header http_500;``
+ | ``fastcgi_ignore_headers Cache-Control Expires Set-Cookie;``
+ |
+ | ``location ~ \.php(?:$|/) {``
+ | ``fastcgi_split_path_info ^(.+\.php)(/.+)$;``
+ |
+ | ``include fastcgi_params;``
+ | ``fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;``
+ | ``fastcgi_param PATH_INFO $fastcgi_path_info;``
+ | ``fastcgi_param HTTPS on;``
+ | ``fastcgi_pass php-handler;``
+ |
+ | ``fastcgi_cache_bypass $skip_cache;``
+ | ``fastcgi_no_cache $skip_cache;``
+ | ``fastcgi_cache OWNCLOUD;``
+ | ``fastcgi_cache_valid 60m;``
+ | ``}``
+ |
+ | Note regarding the ``fastcgi_pass`` parameter:
+ | Use whatever fits your configuration. In the example above, a ``upstream`` was defined in an Nginx global configuration file.
+ | This then can look like:
+ |
+ | ``upstream php-handler {``
+ | ``server 127.0.0.1:9000;``
+ | ``# or``
+ | ``#server unix:/var/run/php5-fpm.sock;``
+ | ``}``
+ |
+
+3. | *Test the configuration*
+ | ``sudo service nginx restart``
+
+ * | Open your browser and clear your cache.
+
+ * | Logon to your ownCloud instance, open the gallery app, move thru your folders
+ | and watch while the thumbs are generated for the first time.
+ * | You may also watch with eg. ``htop`` your system load while the thumbnails are processed.
+ * | Goto another app or logout and relogon.
+ * | Open the gallery app again and browse to the folders you accessed before.
+ | Your thumbnails should appear more or less immediately.
+ * | ``htop`` will not show up additional load while processing, compared to the high load before.
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/owncloud-doc.git
More information about the Pkg-owncloud-commits
mailing list