Linux下多核环境Erlang的SMP測试
目标
(1) 了解在多核cpu环境下,erlang并发进程调度对各个cpu核负载的影响;
(2) Erlang虚拟机的内存添加机理;
(3) Erlang进程的调度情况;
(4) Linux下监控cpu的使用状况
实验环境
联想小型机:操作系统:RedHat Enterprise LinuxServer release6.4(Santiago)
内核版本号:Linux server1 2.6.32-358.el6.x86_64#1 SMP
CPU型号:Intel(R)Xeon(R)CPU E7-4820 @2.00Ghz;
4颗cpu,每颗cpu物理核数为8,总物理核数为32,逻辑核数为64
内存:125G
磁盘:289G
Erlang OTP:Erlang/OTP 17[erts-6.0][source][64bit][smp:64:64][async-thread:10]
測试过程
Erlang并发进程
測试代码
-module(test).
-export([start_proc/1]).
start_proc(Num) ->
case Num =:= 0 of
true -> ok;
false -> spawn(fun()-> loop() end),start_proc(Num-1)
end.
loop() -> loop().
Cpu执行状况
test:start_proc(1000000)启动1000000个进程后,运行mpstat –PAll 2 10
并发IO
測试代码
-module(testio).
-export([start_proc/1]).
name() ->
{A,B,C} =erlang:now(),
Integer_to_list(A) ++Integer_to_list(B)++Integer_to_list(C).
io() ->
{ok,Fd} = file:open(“./data/”++name(),[write,raw,binary,append]),
file:write(Fd,”Hi zcc,nice to meet you”),
file:read(Fd,23),
file:close(Fd).
start_proc(Num) ->
IO = fun()-> io() end,
case Num =:= 0of
true ->ok;
false-> spawn(IO),timer:sleep(1),start_proc(Num-1)
end.
Linux下查看内核相关信息
vmstat –n 3每隔3s刷新一次
利用sar进行cpu利用率的分析 sar –u 2 10
分析执行进程队列长度sar –q 2 10
cpu %usr %nice%sys %iowait %irq %soft %steal %guest %idle
mpstat –P 1:查看1号cpu的信息
%steal:虚拟cpu无意识等待时间百分比
%nice:cpu处在带有nice值的user模式下时间百分比
top –M 后按下F键,然后按j,回车,可看到进程在哪个核上执行
结论
(1) 在默认情况下Erlang的smp的调度进程schedualer是与cpu的核相应的,而不是与cpu的个数相应的,就如本环境下有4个cpu,32个物理核,开启超线程后为64个逻辑核,调度进程数为64;
(2) 当erlang并发多个进程后,通过cpu的负载能够看出,各个进程会均匀的分布在各个核上执行,而不会是某个核负载过大,某个核负载过小的情况发生,此件事情是有操作系统来做的,程序猿无须关心;
(3) Erlang虚拟机的内存会随着进程数的添加,自己主动从主机内存中申请添加,这与java虚拟机不同,jvm1.6曾经内存不会自己主动添加内存,仅仅能手动配置添加jvm内存,从1.7以后才可以共享物理主机内存;Erlang虚拟机没有抑制内存增长机制。虚拟机不断的分配内存,迫使系统不得不使用交换区,直到虚拟机内存耗尽,变得很迟钝。Erlang虚拟机设计的‘私有堆’和基于队列的编程模型是长处也是缺点,当在生产环境下执行erlang虚拟机时,要配备一个系统级的检測,以便在erlang内存使用量飞涨时,可以杀死进程。
(4) Erlang调度器执行于一个OS线程,由OS决定其是否执行在一个核上,一般来说,OS会保证线程在执行期间执行于一个核上;
(5) 估算一个系统的进程数上限=内存总量/erlang:process_info(self(),memory),得到erlang的wordsize=erlang:system_info(wordsize).Erlang中一个进程所占内存大概为2667字节。
(6) 測试结果
|
启动进程数 |
虚拟机内存 |
启动时间 |
|
10万 |
299M |
12.3s |
|
100万 |
2.7G |
6.8s |
|
1000万 |
27.2G |
57.6s |
|
55164851 |
132G |
400s |
Linux下多核环境Erlang的SMP測试的更多相关文章
- linux下Java环境的配置
linux下Java环境的配置 现在用linux的朋友越来越多了,前几天就有两个朋友问我linux下怎么配置java环境,我想还有很多朋友想了解学习这方面的东西,就写一个完全一点的linux java ...
- hadoop搭建杂记:Linux下JDK环境变量的设置(三种配置环境变量的方法)
Linux下JDK环境变量的设置(三种配置环境变量的方法) Linux下JDK环境变量的设置(三种配置环境变量的方法) ①修改/etc/profile文件 如果你的计算机仅仅作为开发使用时推荐使用这种 ...
- 记一次Linux下JavaWeb环境的搭建
今天重装了腾讯云VPS的系统,那么几乎所有运行环境都要重新部署了.过程不难懂,但是也比较繁琐,这次就写下来,方便他人也方便自己日后参考参考. 我采用的是JDK+Tomcat的形式来进行JavaWeb初 ...
- 实验二:Linux下Xen环境的安装
实验名称: Linux下Xen环境的安装(centOS7) 实验环境: 本次实验基本是在centOS7的环境下完成,系统内核和系统版本如下: 实验要求: 为centOS7的环境下安装Xen的平台,能够 ...
- linux下php环境的装配以及php storm的链接
linux下php环境的装配以及php storm的链接 本次安装在deepin系统下完成 一.安装LAMP组合 Linux+Apache+Mysql+php 直接命令 sudo apt-get in ...
- linux下配置环境变量方式
linux下配置环境变量有多种方式,下面简述之 方式1.编辑 /etc/profile 文件,增加如下内容 JAVA_HOME=/usr/local/jdk1. export JAVA_HOME PA ...
- linux 下PATH环境变量
环境变量简介 什么是环境变量呢?简要的说,就是指定一个目录,运行软件的时候,相关的程序将会按照该目录寻找相关文件. 在linux系统下,如果你下载并安装了应用程序,很有可能在键入它的名称时出现&quo ...
- linux下LAMP环境搭建
++++++++++++++++++++++++++++++++++++++++++++++ linux下LAMP环境搭建 ++++++++++++++++++++++++++++++++++++++ ...
- 环境变量解释以及在Linux下的环境变量设置
一.环境变量解释 环境变量是什么? 引用百度百科里面的解释:环境变量是操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息.例如Windows系统中的path环境变量,当要求 ...
随机推荐
- MAC上python环境搭建
mac自带的有python,如果你需要查看版本,打开terminal输入以下命令: python --version 如果你需要安装新的python版本,有几种方法可以安装,一是去python官网下载 ...
- pythonBasic
1,judgment in deciding(if...:,if..else:,if else...else:),loop(for...:,while True...:) break,continu ...
- 各硬件装置在 Linux 中的文件名(笔记)
各硬件装置在 Linux 中的文件名
- SQL 通配符
在搜索数据库中的数据时,SQL 通配符可以替代一个或多个字符.SQL 通配符必须与 LIKE 运算符一起使用,必须放在引号内. 在 SQL 中,可使用以下通配符: %:替代一个或多个字符. _:仅替代 ...
- 虚拟机下opensips 启动
先启动MYSQL mysql:service mysqld start 然后启动RTP代理 rtpproxy -l 192.168.6.199 -s udp:192.168.6.199:7890 -F ...
- html image -- data:image/png;base64
1, data:image/png;base64 <!DOCTYPE HTML> <html> <head> <meta http-equiv=" ...
- 【二分答案】【POJ3122】【Northwestern Europe 2006】Pie
Pie Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10629 Accepted: 3744 Special Ju ...
- .Net 中DataSet导出为excel的方法
依旧是留下代码防止以后忘记 protected void Export_Click(object sender, EventArgs e) { DataSet data = "" ...
- 黑马程序员——java基础之文件复制
---------------------- ASP.Net+Unity开发..Net培训.期待与您交流!---------------------- <a href="http:// ...
- 找出数组中特定和数字下标(JAVA)
比如: 输入: numbers={2, 7, 11, 15}, target=9 输出: index1=1, index2=2 public class _003TwoSum { public sta ...