0

我刚刚实现了 G-WAN Web 服务器并测试了我的代码,但是很奇怪我的服务器响应有时非常快(20 毫秒),有时超过几秒(6-7 秒)甚至超时......

我尝试简化我的代码,并向客户端返回一个字符串,问题仍然存在......此外,我记录了我的代码消耗的时间,它从未超过 1 秒,那么是什么原因造成的?!

我猜这是网络延迟造成的,并测试了同一台服务器的网络速度,它非常快,有什么想法吗?(是否会包含一些 3rd 方库,如 MySQL 引起的问题?)

这是我的 G-WAN 日志:

*------------------------------------------------  
*G-WAN 4.3.14 64-bit (Mar 14 2013 07:33:12)  
* ------------------------------------------------  
* Local Time: Mon, 29 Jul 2013 10:09:05 GMT+8  
* RAM: (918.46 MiB free + 0 shared + 222.81 MiB buffers) / 1.10 GiB total  
* Physical Pages: 918.46 MiB / 1.10 GiB  
* DISK: 3.27 GiB free / 6.46 GiB total  
*  Filesystem    Type    Size  Used Avail Use% Mounted on  
*  /dev/mapper/vg_centos6-root  
*                ext4    6.5G  3.2G  3.0G  52% /  
*  tmpfs        tmpfs   1004M  8.2M  995M   1% /dev/shm  
*  /dev/xvda1    ext4    485M  129M  331M  28% /boot  
* 105 processes, including pid:10874 '/opt/gwan/gwan'  
* Page-size:4,096 Child-max:65,535 Stream-max:16  
* CPU: 1x Intel(R) Xeon(R) CPU E5506 @ 2.13GHz  
*  0 id: 0     0  
* Cores: possible:0-14 present:0 online:0  
* L1d cache:   32K line:64     0  
* L1i cache:   32K line:64     0  
* L2  cache:  256K line:64     0  
* L3  cache: 4096K line:64     0  
* NUMA node #1 0  
* CPU(s):1, Core(s)/CPU:0, Thread(s)/Core:2  
* Bogomips: 4,256.14  
* Hypervisor: XenVMMXenVMM  
*   using   1 workers 0[1]0  
*   among   2 threads 0[]1  
* 64-bit little-endian (least significant byte first)  
* CentOS release 6.3 (Final) (3.5.5-1.) 64-bit  
* user: root (uid:0), group: root (uid:0)  
* system  fd_max: 65,535  
* program fd_max: 65,535  
* updated fd_max: 500,000  
* Available network interfaces (3):  
* 127.0.0.1  
* 192.168.0.1  
* xxx.xxx.xxx.xxx  
* memory footprint: 1.39 MiB.  
* Host /opt/gwan/0.0.0.0_8080/#0.0.0.0  
* loaded index.c                        3.46 MiB   MD5:afb6c263-791c706a-598cc77b-e0873517  
* memory footprint: 3.40 MiB.  
4

1 回答 1

0

如果我使用 -g 模式,并将工作人员的数量增加到服务器的 CPU 数量,这个问题似乎得到了解决

然后,这似乎是一个CPU检测问题。请转储您的 gwan.log 文件头(CPU 检测)的相关部分,以便 ew 可以查看。

当 G-WAN 必须使用必须搜索和链接的外部库重新编译 servlet 时,这可能需要一些时间(特别是如果只有一个工作人员并且其他请求处于待处理状态)。


更新:在您的 gwan.log 文件转储之后,重要的是:

CPU: 1x Intel(R) Xeon(R) CPU E5506 @ 2.13GHz  
  0 id: 0     0  
 Cores: possible:0-14 present:0 online:0  
 CPU(s):1, Core(s)/CPU:0, Thread(s)/Core:2  
 Hypervisor: XenVMMXenVMM  
   using   1 workers 0[1]0  
   among   2 threads 0[]1  

英特尔 E5506 是 4 核 CPU……但Xen Hypervisor报告 1 个 CPU 和0 个内核(并且启用了超线程,没有任何 CPU 内核就没有任何意义)。

为什么要Xen优先考虑用完全废话破坏有关 CPU 的真实和正确信息,这超出了本次讨论的目的。

我只能说这是“moriya”遇到问题的原因(因此“修复”是./gwan -g -w 4为了绕过损坏的 Linux 内核/procCPUID指令报告的错误信息)。

我只能建议避免使用脑损伤的管理程序,这些管理程序会破坏检测 CPU 拓扑的两种标准方法:Linux 内核 /proc 结构和 CPUID 指令,从而阻止多核软件(如 G-WAN)正常运行。

于 2013-07-29T13:40:55.357 回答