Linux网关超时是怎么处理,AWS ec2上的504网关超时,不执行长PHP脚本

当我试图调用由

PHP编程的GET API时,我多次遇到过http 504网关超时错误.

这是我的服务器和AWS环境.

>运行带有apache服务器(2.4.12)的php代码(5.4.40)的Amazon Linux的ec2实例,用于为客户端的api调用服务.

> AWS弹性负载均衡器,用于平衡我的某个实例的流量. (现在,我只有一个实例,如果我需要更多实例来处理流量,只需为将来设置ELB.)

>用于保存数据的AWS RDS数据库(MySQL 5.6.21).

从一些关于504网关超时的文章中,我已经尝试修改这些设置:

# ELB

idle timeout => 300

# php.ini

max_execution_time => 301

max_input_time => 301

# httpd conf

MaxKeepAliveRequests => 100

KeepAliveTimeout => 30

但是所有这些对我来说都没有用,有时它仍会得到504网关超时.

我的PHP脚本不是一个很长的脚本,它只是从3个表中获取来自mysql数据库(AWS RDS)的数据并将数据返回给客户端,没有上传文件或生成大文件,所以我认为执行时间不是问题.

奇怪的是,504网关超时错误并不总是发生,大部分时间都是正常的,只是发生了一些,现在,我仍然不明白504错误何时会发生,这真的很奇怪,如果有人能给我一些关于如何解决这个问题的建议,对我来说真的是一个大忙.

===新的更新===

我刚刚在我的php代码中发现了一个问题,我认为这是带有自动加载问题的命名空间.

我在同一个文件夹中有2个php文件,它意味着2个具有相同命名空间的类

文件:

My/Namespace

- Class1.php

- Class2.php

类和命名空间:

1类

// Class1

namespace My\Namespace;

class Class1 {

public static function getInstance() {

//return...

}

}

等级2

// Class2

namespace My\Namespace;

class Class2 {

public static function getInstance() {

//return...

}

public function getClass1Instance() {

$class1 = Class1::getInstance();

return $class1;

}

}

在Class2.php中我尝试调用Class1的静态函数,但我没有添加“use namespace”,所以我将以下行添加到Class2.php

use My\Namespace\Class1;

问题解决了!但我仍然不确定为什么我应该在Class2.php中添加“use namespace”,Class1和Class2都在同一个命名空间中,如果我添加“use namespace”,即使它们在同一个命名空间中也是如此?

附:我发现这个命名空间问题,因为当504网关错误发生时,我试图在短时间内多次调用API,并显示php错误消息并告诉我

“Class1 is not found in Class2.php”

但有时PHP错误信息显示

“Cannot call a overloaded function in Class2.php, getClass1Instance()”

希望我提供关于这个问题的足够信息,并感谢所有留下评论或回答我的问题的人,m(_ _)m

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值