在 Windows Server 2016 上,当我在 cmd 提示符下执行“netstat -s”时,我得到了一堆统计数据。其中之一是“无端口”。
这是什么意思?这是请求时找不到可用端口的次数吗?或者这是指当前正在使用的端口数?还有别的吗?
我在两台几乎相同的服务器上使用带有 MySQL 和 PHP 的 Windows Server 2016 上的 IIS。我最近注意到我的两台服务器之一的速度变慢了,但只有当我的站点尝试同时执行多个脚本实例时才会发生这种情况。他们似乎被困在了彼此身上。
一个完美的例子是我的搜索页面。当用户键入搜索查询时,每次按键(在第二个字母之后)只要自上次按键后至少有 200 毫秒的延迟,就会执行一次搜索。因此,如果您快速键入,它最后只会进行一次搜索,但对于较慢的打字员(按键之间等待超过 200 毫秒的人),这将触发对搜索结果的多次调用。请参阅此屏幕截图。
请注意所有待处理的请求,在此屏幕截图中,第一个请求刚刚在 19.08 秒完成。显然太长了。当他们全部完成时,他们都已经超过 15 秒才能返回一个简单的结果集。
请记住,这些查询在 MySQL Workbench 中运行时以及在我的其他没有遇到此问题的服务器上运行时只需要几分之一秒。在此屏幕截图(来自良好的服务器)中看到完全相同的搜索在四分之一秒内返回。
在我看来,(在坏的服务器上)由于某种原因它们无法同时执行,因为如果我只执行一次搜索(通过快速键入以触发一次搜索)它很快就会回来,但是如果我像这样执行倍数,他们都像堵车一样卡住了。什么可能导致这种情况?
下一个屏幕截图显示了我在坏服务器上仅触发一次搜索时的结果。如您所见,它恢复得非常快。所以问题只是在同时执行多个相同的脚本时。
我最近确实对坏服务器进行了一些更改,但据我所知,我所做的唯一更改是允许上传更大的文件。
我可能对此服务器进行了其他我不记得的更改。
临时修复
我可以通过在搜索时允许更长的按键之间的延迟来缓解这个问题,我已经做到了,将它增加到 800 毫秒,所以即使是慢速打字机也看不到这个问题,但这只是一个创可贴解决方案,并没有解决也影响我网站其他区域的潜在问题。
我试过的
到目前为止,我已经确认我的 IIS 配置、MySQL 配置(my.ini)和我的 PHP 配置(php.ini)在两台服务器上的所有重要方面都是相同的(至少在我看来是显而易见的) . 我还确认,如果我在 MySQL Workbench 中执行我在此搜索中运行的选择语句,它们在两台服务器上的性能同样出色。仅在我的网络应用程序中遇到此问题。
为了以防万一,我暂时撤消了我对 IIS 所做的两个更改以上传更大的文件,但这似乎没有什么区别。
我还下载并安装了 LeanSentry,它每天会警告我一两次,我的网站已看到被阻止的请求,我认为这正是我在这里看到的,但不幸的是,LeanSentry 只能查明 ASP 问题的根源页面,而不是 PHP。所以它本质上只是对我确认存在问题,但除此之外它无法帮助我。
其他症状
如果我同时打开多个报告,我会看到类似的问题。如果我允许一个报告在打开下一个报告之前完成加载,它们都会快速加载,但如果我强制我的应用程序一次打开多个报告,它们都会卡住。
什么可能导致这个瓶颈问题?
我正在做一些测试(在我的开发服务器上),以帮助我找出导致我的生产服务器上不断增长的连接列表的原因。我的假设是某些页面没有使用 mysql_close() 关闭连接。因此,我首先尝试确认是什么创建了连接,然后确认如何确保它们已关闭。
为此,我创建了一个简单的脚本来创建连接,然后使用 mysql_close() 来关闭连接。不幸的是,我的测试处于停滞状态,因为我什至无法确认我正在创建连接。
当我执行以下代码(注意 mysql_close())被注释掉时,我希望在我的客户端连接列表中看到一个新连接,并且我希望它会在 20 秒后自行终止,因为我已将 wait_timeout 设置为 20 . 然而,甚至似乎没有建立任何联系。
<?php
$dblocation = "127.0.0.1";
$dbusername = "blah_dev";
$dbpassword = "test";
$dbname = "blah_dev";
$dbdescription = "";
$conn = mysql_connect($dblocation, $dbusername, $dbpassword) or die ("<span style='color:red'>Unable to connect! Press F5 to try again.</span>");
mysql_select_db($dbname, $conn) or die ("Unable to select database!");
$sql = "select fullname from months";
$result = mysql_query($sql);
if($row = mysql_fetch_array($result)){
echo "<table border=1>";
do{
$month = $row["fullname"];
echo "<tr><td>".$month."</td></tr>";
}while ($row = mysql_fetch_array($result));
echo "</table>";
}
//mysql_close();
?>
我什至添加了一个简单的选择语句来确认我正在建立连接,并且我是。为什么此连接未显示在 MySQL Workbench 的客户端连接列表中?我还使用另一个工具(MySQL 诊断管理器)向我显示当前线程,但它也没有显示在那里。
我在这里想念什么?
我正在运行 Windows、IIS、MySQL、PHP。
在 [mysqld] 下的 my.ini 中,wait_timeout 的值设置为 60。
wait_timeout = 60
但是当我执行以下操作时:
show variables like 'wait_timeout';
它向我显示该值为 28800,我知道这是默认值。
所以我尝试通过执行以下命令来设置值:
SET GLOBAL wait_timeout = 60;
但这似乎不起作用。MySql Workbench 告诉我“受影响的 0 行”,当我执行 show variables like 'wait_timeout'时,它仍然告诉我该值为 28800。
我还检查了 interactive_timeout 并且故事是一样的。该值为 28800,我无法更改。
我在这里想念什么?
在专用的 Windows Server 2016 上使用 IIS 我有一个使用 SSL 在我的服务器 (dev.timesavr.net) 上运行的站点。这个网站已经运行了至少一年了。现在,我在具有不同域 (dev.benjicare.com) 的同一服务器上添加了第二个站点,但我无法从服务器外部访问它。
两个站点都绑定到专用 IP 地址。我在这个站点(和其他站点)上看到了很多使用“主机标头”以使 IIS 托管多个域的建议,但这些建议只能用于不安全的站点。我需要使用 IP 地址,因为我需要对两者都使用 SSL,因此 IIS 中的两个网站都绑定到它们自己的唯一 IP 地址。
dev.timesavr.net 已经可以通过 SSL 访问。我还没有得到 dev.benjicare.com 的证书,但此时我正试图让它在没有 SSL 的情况下工作。只有当我在服务器本身(通过 RDP)上时,我才能在浏览器中访问它,但从任何其他机器我都无法访问它。在尝试连接大约 30 秒后,它最终超时并显示“无法访问此站点”。
我已经创建了一个 A dns 记录,将我的 IP 指向 dev.benjicare.com,并且正如您在此处看到的那样,它正在正常工作: https ://www.whatsmydns.net/#A/dev.benjicare.com
我还检查了防火墙以查看端口 80 上的 WWW 入站规则是否限制了 IP 地址,但事实并非如此。我在这里还缺少什么来完成这项工作?看起来这应该很简单。
我正在将现有的 PHP/MySQL 网站应用程序移动到新服务器,由于某种原因,我在登录后收到“ERR_CONNECTION_REFUSED”错误。
我已经安装了 PHP 和 MySql 并复制了数据库。我已经在 IIS 中配置了网站,我可以加载登录页面,该页面也进行数据库连接,所以我知道我能够连接到数据库并且我知道 PHP 工作正常。
但是,一旦我输入用户名和密码,它就会发出一分钟的声音,最后告诉我它无法连接。
This site can’t be reached
198.72.112.108 refused to connect.
Try:
Checking the connection
Checking the proxy and the firewall
ERR_CONNECTION_REFUSED
这是我在 Chrome 上遇到的错误,但我在 Firefox 上遇到了类似的错误。
起初我想可能是因为它正在重定向到 https 并且我还没有安装安全证书,但这不会阻止页面加载。
我已经仔细检查了数据库上的用户权限是否与旧服务器完全匹配,所以我知道这很好,登录页面与我试图重定向到的页面位于同一文件夹位置,因此文件系统权限显然是好的。
什么可能导致此 ERR_CONNECTION_REFUSED 错误?