我们有一个运行 nginx 和 PHP-FPM 的负载相当大的服务器。我们在这台服务器上有 6 个网站,运行 PHP-FPM 和 nginx。软件都是 vBulletin 3.8 和 WordPress。数据库位于单独的服务器上。
现在,因为这些是非常受欢迎的网站,我们通常一次有 7-8,000 名访问者在线,每个页面大部分都会访问数据库。我相信这是我们问题的根源。
因为我们在 MySQL 服务器上有这么多大型数据库,而且因为查询可以,老实说,在软件中会好很多,我认为 MySQL 有时会无法及时将结果返回给 PHP,从而产生级联效应,最终导致一切停止,直到我们重新加载 PHP-FPM。在我们这样做之后,一切又开始正常了。
我在解决此问题时遇到问题的原因是我无法从日志中真正辨别出任何内容。在 MySQL 慢查询日志中,当停机发生时,我看不到任何有趣的内容。在 nginx 日志中,我看到数以千计的条目说读取请求超时或连接超时(到 PHP-FPM)。在 PHP-FPM 日志中,我看到很多行说“执行超时(31 秒),终止
所以在这一点上我完全不知道去哪里寻找问题。显然,无论发生什么事,都是因为这些脚本有时执行得不够快(通常它们会在一秒钟内加载,但会发生一些事情导致加载时间猛增)。这种情况一天发生很多次,对我们来说已经成为一个相当大的问题。
现在我只有一个 crontab 来每 10 分钟为 php5-fpm 重新加载提供服务,它可以解决崩溃问题。当然,当PHP重新加载时,nginx会抛出502网关错误,所以也不是很好的解决方案。
PHP 正在运行 APC 缓存,如果这很重要的话。我在一些地方读到 APC 在某些情况下会导致挂起。
任何指针都会有所帮助。我真的不想一直担心这台机器。
当然可以提供更多信息。只要让我知道你需要什么。
更新:我只是将 apc.php 复制到一个网络根目录并访问它以查看我们的统计信息。事情看起来不错。然后我单击链接转到用户统计数据,然后 BOOM 服务器立即挂起。我重新加载了 php-fpm,然后重新加载了用户统计页面,它运行良好。等了一分钟,再次重新加载,服务器再次挂起。
所以这肯定似乎与 APC 相关。问题是 - 我们如何解决它?
APC 配置:
[apc]
apc.enabled="1"
apc.stat = "1"
apc.max_file_size = "2M"
apc.localcache = "1"
apc.localcache.size = "256"
apc.shm_segments = "1" …
Run Code Online (Sandbox Code Playgroud) 我正在部署一个小型 3 节点集群,我想将清单中定义的公共 IP 地址添加到所有节点的 /etc/hosts 文件中。
我正在尝试使用以下内容,但它给了我一个错误:
- name: Add IP address of all hosts to all hosts
lineinfile:
dest: /etc/hosts
line: '{{ hostvars[item]["ansible_host"] }} {{ hostvars[item]["ansible_hostname"] }} {{ hostvars[item]["ansible_nodename"] }}'
state: present
with_items: groups['all']
Run Code Online (Sandbox Code Playgroud)
错误是:
致命:[app1.domain.com]:失败!=> {"failed": true, "msg": "the field 'args' has an invalid value, 它似乎包含一个未定义的变量。错误是:'ansible.vars.hostvars.HostVars object' has no属性 u"groups['all']"\n\n错误似乎在 '/Users/k/Projects/Ansible/roles/common/tasks/main.yml':第 29 行,第 3 列,但可能\ nbe 位于文件中的其他位置,具体取决于确切的语法问题。\n\n有问题的行似乎是:\n\n\n- name: 将所有主机的 IP 地址添加到所有主机\n ^ here\n"}
关于我缺少什么的任何想法?
我们的 nginx 配置中有一些复杂的问题需要解决。目前我们在文档根目录中安装了一个软件。该软件使用单个入口点(index.php)和查询字符串来显示内容。示例 URL 为:
/index.php?forums/forum-name.1
/index.php?threads/thread-name.1
/index.php?users/user-name.1
Run Code Online (Sandbox Code Playgroud)
ETC...
现在,我们将该软件移动到文档根目录的子目录中/f/
,并将一个新软件安装到文档根目录中。该软件还使用index.php(不过没有查询字符串)。因此,我们需要制定一组重写规则,仅重写旧软件中的 URL。同时,我们还将从 URL 中删除 index.php。一组示例映射是:
/index.php?forums/forum-name.1 --> /f/forums/forum-name.1
/index.php?threads/thread-name.1 --> /f/threads/thread-name.1
/index.php?users/user-name.1 --> /f/users/user-name.1
Run Code Online (Sandbox Code Playgroud)
所以基本上,我需要重定向index.php请求的某个子集(仅包含?forums,?threads,?users等...),然后删除index.php部分并发送到/f/目录。
我整个上午都在玩这个,但就是无法让它按照我需要的方式工作。