小编Piy*_*sal的帖子

WhatsApp如何在每台服务器上实现200万个连接?

在Ubuntu上,可以打开的最大套接字数似乎受以下因素控制:

$ cat /proc/sys/net/ipv4/tcp_max_orphans
262144
Run Code Online (Sandbox Code Playgroud)

根据Rick Reed(来自WhatsApp)的一个演讲,这些人使用FreeBSD和ErLang在一台"单一服务器"上进行了200万次并发连接.我的理解是我们总是需要内核的一些支持.是的,看起来像FreeBSD调整了这个功能:

hw.machine: amd64
hw.model: Intel(R) Xeon(R) CPU X5675 @ 3.07GHz
hw.ncpu: 24
hw.physmem: 103062118400
hw.usermem: 100556451840

kb@c123$ uname -rps
FreeBSD 8.2-STABLE amd64

jkb@c123$ cat /boot/loader.conf.local
kern.ipc.maxsockets=2400000
kern.maxfiles=3000000
kern.maxfilesperproc=2700000
Run Code Online (Sandbox Code Playgroud)

所以,看起来像内核可以调整以支持这么多的物理连接,假设我们有足够的内存,对吗?如果是,那么它看起来很简单,那么它的炒作是什么?或者我错过了什么?

谢谢.

unix sockets erlang freebsd whatsapp

26
推荐指数
2
解决办法
2万
查看次数

是什么让VxWorks如此确定和快速?

我很久以前就在VxWorks 5.5上工作,这是在世界上最好的实时操作系统上工作的最佳体验.从那时起,我再也没有机会继续努力.但是,一个问题不断涌现,让我如此快速和确定性?

我无法通过Google找到这个问题的很多参考资料.

所以,我只是想到了什么使常规操作系统不确定:

  1. 内存分配/解除分配: - Wiki说RTOS使用固定大小的块,因此这些块可以直接编入索引,但这会导致内部碎片,我相信这对于内存是关键任务系统来说根本不可取.已经有限了.

  2. 分页/分段: - 它与点1的链接

  3. 中断处理: - 不确定VxWorks如何实现它,因为这是VxWorks非常好的处理

  4. 上下文切换: - 我相信VxWorks 5.5用于在内核地址空间中执行的所有进程,因此上下文切换过去只涉及保存寄存器值而不涉及PCB(进程控制块),但我仍然不是100%肯定

  5. 进程调度算法: - 如果Windows实现抢占式调度(优先级/循环),那么处理调度的速度和VxWorks一样快吗?我不这么认为.那么,VxWorks如何处理调度?

请在需要时纠正我的理解.

performance operating-system vxworks

9
推荐指数
1
解决办法
1万
查看次数

如何在gdb打印上grep

有没有办法在gdb中输出print命令的输出?在我的情况下,我正在使用gdb调试核心转储,我正在调试的对象包含很多元素.我发现很难找到匹配的属性,即:

(gdb) print *this | grep <attribute>
Run Code Online (Sandbox Code Playgroud)

谢谢.

unix debugging gdb

9
推荐指数
3
解决办法
8300
查看次数

如何在 Python 中发布分块的编码数据

我正在尝试将分块编码的数据发布到 httpbin.org/post。我尝试了两个选项:Requests 和 httplib

使用请求

#!/usr/bin/env python

import requests

def gen():
        l = range(130)
        for i in l:
                yield '%d' % i

if __name__ == "__main__":
        url = 'http://httpbin.org/post'
        headers = {
                        'Transfer-encoding':'chunked',
                        'Cache-Control': 'no-cache',
                        'Connection': 'Keep-Alive',
                        #'User-Agent': 'ExpressionEncoder'
                }
        r = requests.post(url, headers = headers, data = gen())
        print r
Run Code Online (Sandbox Code Playgroud)

使用 httplib

#!/usr/bin/env python

import httplib
import os.path

if __name__ == "__main__":
        conn = httplib.HTTPConnection('httpbin.org')
        conn.connect()
        conn.putrequest('POST', '/post')
        conn.putheader('Transfer-Encoding', 'chunked')
        conn.putheader('Connection', 'Keep-Alive')
        conn.putheader('Cache-Control', 'no-cache')
        conn.endheaders()
        for i in range(130): …
Run Code Online (Sandbox Code Playgroud)

python http httplib chunked-encoding python-requests

7
推荐指数
1
解决办法
1万
查看次数

为什么这个过程会以4GB的速度被杀?

我编写了一个程序,可以处理大量数据.我的CPU和操作系统(Ubuntu)都是64位,我有4GB的RAM.使用"top"(%Mem字段),我看到进程的内存消耗上升到大约87%,即3.4+ GB然后它被杀死了.

然后,我使用"uname -m"检查进程可以访问多少内存,这是"无限制".

现在,由于操作系统和CPU都是64位并且还存在交换分区,操作系统应该使用虚拟内存,即总共[> 3.4GB + yGB来自交换空间],并且只有当进程需要更多内存时才会使用它应该被杀了.

所以,我有以下问题:

  1. 理论上,64位m/c上的进程可以访问多少物理内存.我的回答是2 ^ 48字节.
  2. 如果存在少于2 ^ 48字节的物理内存,那么操作系统应该使用虚拟内存,对吗?
  3. 如果对于上述问题的回答是肯定的,那么操作系统也应该使用SWAP空间,为什么它甚至不使用它就会终止进程.我不认为我们必须使用一些特定的系统调用来编写我们的程序来实现这一点.

请建议.

linux 64-bit process

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

pip:缺少分发规范.如何解决这个问题?

我在虚拟机上运行此命令时出现以下错误:

$ sudo pip install -U -v --no-deps -b /tmp/piyush/ /tmp/piyush/common_bundle

  File "/usr/local/lib/python2.7/dist-packages/pip-6.0.6-py2.7.egg/pip/_vendor/pkg_resources/__init__.py", line 2807, in parse_requirements
    raise ValueError("Missing distribution spec", line)
ValueError: ('Missing distribution spec', '/tmp/piyush/common_bundle')
Run Code Online (Sandbox Code Playgroud)

我的输入文件是存档.

$ file common_bundle
common_bundle: Zip archive data, at least v2.0 to extract
Run Code Online (Sandbox Code Playgroud)

pip的版本是:

$ pip -V
pip 6.0.6 from /usr/local/lib/python2.7/dist-packages/pip-6.0.6-py2.7.egg (python 2.7)
Run Code Online (Sandbox Code Playgroud)

这是common_bundle中的pip清单:

# This is a pip bundle file, that contains many source packages
# that can be installed as a group.  You can install this like:
#     pip this_file.zip
# …
Run Code Online (Sandbox Code Playgroud)

python pip

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

如何在容器格式的Hadoop中使用Snappy

我必须使用Snappy压缩地图o/p和map-reduce o/p.此外,这应该是可分割的.

当我在网上学习时,为了让Snappy写出可拆分的o/p,我们必须以类似Container的形式使用它.

你能建议怎么做吗?我尝试在网上找到一些例子,但不能很好.我正在使用Hadoop v0.20.203.

谢谢.PIYUSH

compression hadoop mapreduce

4
推荐指数
1
解决办法
4919
查看次数

如何在Hadoop中使用CompressionCodec

我正在做以下操作来从reducer压缩o/p文件:

OutputStream out = ipFs.create( new Path( opDir + "/" + fileName ) );
CompressionCodec codec = new GzipCodec(); 
OutputStream cs = codec.createOutputStream( out );
BufferedWriter cout = new BufferedWriter( new OutputStreamWriter( cs ) );
cout.write( ... )
Run Code Online (Sandbox Code Playgroud)

但是在第3行得到了空指针异常:

java.lang.NullPointerException
    at org.apache.hadoop.io.compress.zlib.ZlibFactory.isNativeZlibLoaded(ZlibFactory.java:63)
    at org.apache.hadoop.io.compress.GzipCodec.createOutputStream(GzipCodec.java:92)
    at myFile$myReduce.reduce(myFile.java:354)
Run Code Online (Sandbox Code Playgroud)

我也跟着JIRA一样.

你能否建议我做错了什么?

java compression hadoop mapreduce

2
推荐指数
1
解决办法
4293
查看次数

如何在常规时间内在python中查找list/tuple的大小

我是Python的新手.我只是想知道是否可以在O(1)时间内找到列表或元组的长度.(len()是O(n))

在C中,我可以实现如下类似的事情:

int a[] = {1, 2, 3, 4 ,5};
printf("Length of Array a is :: %d\n", sizeof(a)/sizeof(a[0]));
Run Code Online (Sandbox Code Playgroud)

我知道上面的概念适用于地址,这就是为什么它可以在C中,而根据我的理解,Python不处理地址.但是,为了好奇,我仍然想问这个问题.

python pointers

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