标签: high-load

Gunicorn 在高负载时具有最大请求限制块

我试图理解以下场景:

  • 我有一个前面有 nginx 的网站(使用 SSL,配置见下文)
  • 对 Django 应用程序的请求由 gunicorn 处理(0.18,配置见下文,由 supervisord 管理)
  • 当用户加载网站时,gunicorn 会处理 10 个请求(其他是由 nginx 服务的静态文件)——这些请求不是长时间运行的请求
  • gunicorn 配置为每个 worker最多接受 1000 个请求,直到 worker 重生
  • 大约 450 人能够在很短的时间范围内(1-2 分钟)加载页面
  • 之后 gunicorn 以某种方式阻止并且不再处理任何连接,结果是 nginxGateway Timeout在一段时间后响应

我想工人的重新启动并没有真正发生,或者该机制被负载阻塞了?我想了解解决此问题的方法。

谁能解释这里发生了什么?非常感谢!

PS:我绑定使用gunicorn 18.0,目前无法使用更新版本。

这是我使用的配置。

nginx:

# nginx
upstream gunicorn_app {
    server 127.0.0.1:8100;
}
server {
    listen 443 ssl;
    ...
    # skipping static files config
    ...
    location @proxy_gunicorn_app {
        proxy_read_timeout 1800;
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto …
Run Code Online (Sandbox Code Playgroud)

django high-load nginx gunicorn

8
推荐指数
1
解决办法
9095
查看次数

对于高流量的ajax密集型网站,您会推荐什么?

对于像reddit这样的网站,有很多上/下投票和每个主题的很多评论,我该怎么办?

Lighttpd/Php或Lighttpd/CherryPy/Genshi/SQLAlchemy?

对于数据库,什么会扩展更好/最快的MySQL(4.1或5?)或PostgreSQL?

php python high-load lighttpd cherrypy

7
推荐指数
2
解决办法
1570
查看次数

digg(或其他高负载类别网站)如何存储用户会话?

digg或任何其他高流量网站如何存储用户会话?他们用什么来存储用户会话?文件系统,DB(哪一个?),memcache或两者兼而有之?

让我们想象一个简单的情况.登录用户在登录期间设置了"记住我"标记.我们设置了一个会话cookie,其截止日期为1年.例如,我们将会话保留在memcache中,但我们也应该在DB中保存此会话的记录(在我的版本中).只有具有"记住我"标志的用户才会存储在DB中.这是存储会话的正确方法吗?我的意思是高流量网站,当然(有2个或更多应用服务器,2个或更多数据库,memecache服务器等).在小型网站中默认存储会话方式(在文件系统中)是可以的.

我试图搜索谷歌,但未能找到任何有关它的信息.我已经从"高级PHP编程"一书中读到了一些解决方案,但主要的重点是自定义会话存储处理程序.

真的希望听到好的想法或链接!

谢谢.

php session high-load scalability

6
推荐指数
2
解决办法
625
查看次数

检查mmap的地址是否正确

我正在编写一个高负载的守护进程,它应该在FreeBSD 8.0和Linux上运行.守护程序的主要目的是传递其标识符请求的文件.通过对db的请求将标识符转换为本地文件名/文件大小.然后我使用顺序mmap()调用来传递文件块send().

但是有时文件系统中的db和filesize中的文件大小不匹配(realsize <db中的大小).在这种情况下,我发送了所有实际数据块,当下一个数据块被映射时 - mmap没有返回任何错误,只是通常的地址(我也检查过errno变量,它在mmap之后等于零).当守护进程尝试发送此块时,它会获得Segmentation Fault.(在FreeBSD 8.0 amd64上保证发布此行为)

我打开前使用安全检查以确保stat()通话时的尺寸.然而现实生活告诉我,在罕见的情况下仍然可以提升段错误.

所以,我的问题是有一种方法可以在解除引用之前检查指针是否可访问?当我在gdb中打开核心时,gdb说给定地址超出范围.可能有人可以提出另一个解决方案.

#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <time.h>
#include <unistd.h>

#define FILENAME        "./datafile"

int main()
{
    unsigned long i, j;

    srand(time(NULL));
    unsigned long pagesize = sysconf(_SC_PAGESIZE);

    unsigned long basesize = 4 * pagesize;
    unsigned long cropsize = 2 * pagesize;

    // create 4*pagesize sized file
    int f = creat(FILENAME, 0644);
    for (i = 0; i < basesize; …
Run Code Online (Sandbox Code Playgroud)

c high-load freebsd mmap segmentation-fault

5
推荐指数
1
解决办法
1606
查看次数

Google App Engine上的高度可扩展标签(Python)

我有很多(例如)帖子,标有一个或多个标签.可以创建或删除帖子,并且用户也可以对一个或多个标签进行搜索请求(与逻辑AND结合).我想到的第一个想法是一个简单的模型

class Post(db.Model):
  #blahblah
  tags = db.StringListProperty()
Run Code Online (Sandbox Code Playgroud)

创建和删除操作的实现是显而易见的.搜索更复杂.要搜索N个标签,它将执行N GQL查询,例如"SELECT*FROM Post WHERE tags =:1"并使用游标合并结果,并且它具有糟糕的性能.

第二个想法是分离不同实体中的标签

class Post(db.Model):
    #blahblah
    tags = db.ListProperty(db.Key) # For fast access

class Tag(db.Model):
    name = db.StringProperty(name="key")
    posts = db.ListProperty(db.Key) # List of posts that marked with tag
Run Code Online (Sandbox Code Playgroud)

它通过密钥从db获取标签(比通过GQL快得多)并将其合并到内存中,我认为此实现具有比第一个更好的性能,但是非常频繁可用的标签可以超过允许单个数据存储对象的最大大小.还有另外一个问题:数据存储区只能修改一个单个对象~1 /秒,因此对于频繁使用的标记,我们也存在修改延迟的瓶颈.

有什么建议?

python tags google-app-engine high-load microblogging

5
推荐指数
1
解决办法
1213
查看次数

更好的实践:将负载放在SQL或Web服务器上?

我是美国一所大学的网站管理员.我们网站上有很多要求,我已经建立并在过去7年左右负责.我一直在为我们的网站构建越来越复杂的功能,我的做法一直是尽可能多地将编程负担放在我们的多处理器Microsoft SQL服务器上 - 使用存储过程,视图等,并填写 - 从IIS Web服务器使用PHP,ASP或Perl无法完成的任务.两台服务器都是非常强大且功能强大的机 由于我一直独自完成这项工作已经很长时间没有其他任何人进行头脑风暴,我很好奇我的方法是否适合我们未来更高负荷的情况.

我的问题是:使用嵌套的SELECT语句,视图,存储过程和聚合函数将更多的负载负担放在SQL服务器上是否更好?或者我应该使用服务器端编译来提取多个更简单的查询并通过它们进行处理时间脚本像PHP?继续保持开启或提出更好的方法?

在我做了一些负载跟踪之后,我最近对性能更感兴趣,并且了解到我已经在SQL服务器的肩膀上放了多少.Web服务器和SQL服务器全天快速响应,几乎不考虑我对它们的影响,但我想做好准备并自己进行培训并升级现有代码优化的最佳实践.它变得重要的时间.

感谢您的建议和意见.

php sql-server optimization high-load

5
推荐指数
1
解决办法
339
查看次数

Google Application Engine是一个适合高流量聊天网站的好平台吗?

我正在寻找创建一个高流量的聊天网站,可能是视频流与服务器上发生的一些图像处理.

扫描频道API(http://code.google.com/appengine/docs/python/channel/overview.html)让我充满希望,这可以在没有AJAX轮询的情况下完成,而且一般认为GAE具有很强的可扩展性.

我还有一些顾虑:

1)它可以支持数万个同时实时互动的用户而不会滞后吗?CPU使用率是否有上限?

2)我(可能)将它写在J2EE框架之上.GAE是否保证每个新请求都可以访问全局内存数据存储区,只要应用程序在服务器上运行(Java语言中的"ServletContext")并且可能存储数千兆字节的数据,该数据存储区就可用?有记忆帽吗?

3)完整的J2SE和J2EE堆栈是否可用?我能包括我想要的任何图书馆吗?

4)对于这类问题,有没有比GAE更好的解决方案?我一直在考虑租用几台专用服务器,但这将达到数千/月......

提前致谢!

google-app-engine high-load web-traffic video-streaming chatroom

5
推荐指数
1
解决办法
3330
查看次数

如何让nginx返回静态响应并将请求标头发送到应用程序?

我正在通过将<img>标记嵌入到网站来制作高负荷的网络统计系统.我想做的是:

  1. nginx从某个主机获取图像请求
  2. 它给出了从文件系统托管小1px静态图像的答案
  3. 此时,它以某种方式将请求的标头传输到应用程序并关闭与主机的连接

我正在使用Ruby,我将制作一个纯机架应用程序来获取标题并将它们放入队列以进行进一步计算.

我无法解决的问题是,如何配置sphinx为Rack应用程序提供标头,并返回静态图像作为回复而无需等待Rack应用程序的响应?

此外,如果有更常见的Ruby解决方案,则不需要Rack.

ruby rack high-load nginx

5
推荐指数
1
解决办法
9471
查看次数

php-fpm 中的高 CPU 使用率

我们的 Web 项目有非常奇怪的问题。

我们用:

2 Intel(R) Xeon(R) CPU E5520 @ 2.27GHz
12 GB 内存
我们每秒大约有 20 次点击。每秒 4-5 个请求很重——这是一个搜索请求。
我们使用 nginx + php-fpm (5.3.22)
安装在另一台机器上的 MySQL 服务器。
大多数情况下,我们的平均负载低于 10,CPU 使用率约为 50%
有时我们的 CPU 使用率约为 95%,之后平均负载增长到 50 甚至更多!!!
你可以在这里看到负载平均和 CPU 使用率(我在这里发送图像的声誉很低)
负载平均
CPU 使用率

我们必须重新加载 php-fpm ( /etc/init.d/php-fpm reload ) 以使情况正常化。
这可能每天发生 4-5 次。
我尝试使用 strace 来检查这种情况。
对不起,长日志!命令 strace -cp PID
PID – 的输出是随机的 php-fpm 进程 ID(我们启动 100 个 php-fpm 进程)。
这两个导致CPU使用率高的时刻。

Process 17272 attached - interrupt to quit
Process 17272 …
Run Code Online (Sandbox Code Playgroud)

php linux high-load

5
推荐指数
0
解决办法
3366
查看次数

php-fpm如何使用动态流程管理器管理工作人员?

我想澄清php-fpm如何使用动态流程管理器管理工作人员.

我们假设我们有以下配置:

pm = dynamic
pm.max_children = 100
pm.start_servers = 30
pm.min_spare_servers = 20
pm.max_spare_servers = 60
Run Code Online (Sandbox Code Playgroud)
  1. 当php-fpm启动时,它会产生30个进程
  2. 没有联系.根据min_spare_servers设置,php-fpm会关闭10名工作人员吗?如果是,在什么时候会发生?
  3. 有4个与nginx的连接.php-fpm会与单独的worker一起服务每个连接,并立即产生额外的worker来满足剩余的连接吗?
  4. 有8个连接到nginx.php-fpm在推出60名工作人员之后会如何表现?和(3)中的相同?
  5. 有120个与nginx的连接.将100名工人分配到100个连接后会发生什么?php-fpm是否使用某些队列进行连接?它会限制nginx吗?php-fpm会开始删除与" 服务器达到pm.max_children设置 " 消息的连接吗?
    1. 有0个与nginx的连接.nginx会从100回到60个连接吗?还是50?它会立即杀死40名工人还是会等待一段时间?

如你所见,这是关于php-fpm如何管理进程的一个普遍问题.更具体地说,我想了解php-fpm中pm.max_childrenpm.max_spare_servers之间的区别.

php multithreading high-load nginx

5
推荐指数
1
解决办法
3885
查看次数