zoukankan      html  css  js  c++  java
  • 高负载PHP调优

    高负载PHP调优

    针对PHP的Linux调优

    调整文件描述符限制

    # ulimit -n 1000000

    # vi /etc/security/limits.conf

    # Setting Shell Limits for File Descriptors

    *  soft nofile 1000000

    *  hard nofile 1000000

    禁止PHP代码文件所在分区的文件系统访问时间更新

    # vi /etc/fstab

    比如PHP代码所在分区:

    /dev/sdb1   ext4    errors=remount-ro  0  1

    修改为:

    /dev/sdb1   ext4    noatime,nodiratime,errors=remount-ro  0  1

    将临时文件存储到tmpfs

    在需要处理大量的小图片(比如:用户头像)上传的时候,使用内存文件系统tmpfs来存储,可以减少一些I/O的开销.但是如果用户是上传非常大的文件(比如:视频)的话,就不适合使用tmpfs.

    # vi /etc/fstab

    tmpfs                   /tmp                    tmpfs   defaults,nosuid,noatime 0 0

    PHP配置调优

    php.ini配置调优

    # vi php-app.ini

    [PHP]

    engine = On

    expose_php = Off

     

    max_execution_time = 5

    memory_limit = 256M

    error_reporting = E_ALL & ~E_DEPRECATED

    display_errors = Off

    display_startup_errors = Off

    html_errors = Off

    default_socket_timeout = 5

     

    file_uploads = On

    upload_tmp_dir = /tmp/php

    upload_max_filesize = 50M

    post_max_size = 50M

    max_file_uploads = 20

     

    date.timezone = 'Asia/Shanghai'

    注意这里设置max_execution_time只有5秒.对于一个快的web应用来说,我们真的不想要web应用里有任何长时间运行的web请求,一个web请求持续超过5秒通常意味着有些东西出了问题.我们的目标是页面响应在300-500ms(微秒)之内.

    • PHP-FPM配置调优

    # vi php-fpm.conf

    [my_app]

    ;FastCGI/PHP-FPM使用UNIX Sockets

    listen = /data/my_app/tmp/php.sock

    listen.backlog = 300

    user = www

    group = www

    pm = dynamic

    ;估算pm.max_children = (MAX_MEMORY - 500MB) / 20MB

    pm.max_children = 100

    ;推荐为最大的pm.max_children的%10

    pm.start_servers = 10

    pm.min_spare_servers = 5

    pm.max_spare_servers = 15

    pm.max_requests = 1000

    pm.status_path = /php_status

     

    request_terminate_timeout = 0

    request_slowlog_timeout = 0

    slowlog = /data/my_app/logs/slow.log

  • 相关阅读:
    [LeetCode] Dungeon Game
    [LeetCode] Maximal Rectangle
    [LeetCode] Scramble String -- 三维动态规划的范例
    [LeetCode] Palindrome Partitioning II
    [LeetCode] Palindrome Partitioning
    [LeetCode] Interleaving String
    [LeetCode] Longest Valid Parentheses -- 挂动态规划羊头卖stack的狗肉
    JPA将查询结果转换为DTO对象
    EOS签名R值过大导致报错"is_canonical( c ): signature is not canonical"
    比特币中P2SH(pay-to-script-hash)多重签名的锁定脚本和解锁脚本
  • 原文地址:https://www.cnblogs.com/already/p/5063036.html
Copyright © 2011-2022 走看看