存档

2015年10月 的存档

Centos 7 环境相关

2015年10月15日 没有评论
# init
yum -y install net-tools
yum -y install vim 
yum -y install wget 
yum -y install zip unzip 
yum -y install bzip2 
yum -y install autoconf
yum -y install screen
yum -y install fonts-tweak-tool
# c/c++
yum -y install gcc-c++ libstdc++-devel 
# java
yum -y install java-1.7.0-openjdk* -y 

# disable selinux
/etc/sysconfig/selinux

# 关闭防火墙&关闭开机启动
systemctl stop firewalld.service
systemctl disable firewalld.service

# develop tools
yum groupinstall "Development Tools"

# erlang wxWidgets 支持
# 是否安装:which wx-config && wx-config --version-full 
yum -y install mesa-libGL-devel 
yum -y install mesa-libGLU-devel
yum -y install gtk2-devel
wxWidgets-3.0.2/configure --with-opengl --enable-debug --enable-unicode

# erlang 
yum -y install openssl-devel
yum -y install ncurses-devel 

# perl Unix::Syslog
yum install cpan
perl -MCPAN -e shell
install Unix::Syslog

 

分类: 健忘 标签:

Ejabber 压力测试

2015年10月6日 没有评论

1.测试环境

– 服务端:普通机*(I3 2核心4线程)/mem:16GB

– 客户端:普通机*(I3 2核心4线程)/mem:48GB(4台)

– 系统:sys:Centos  6  Erlang:OTP 18   Ejabberd 15

– 网络:内网千兆互联

分布式测试

distributed-test

 

2.Ejabberd 性能调优

调整ulimit限制

编辑/etc/security/limits.conf,加上:

# 方便看core
root hard core unlimited
root soft core unlimited

root hard fsize unlimited
root soft fsize unlimited

# socket连接数限制
root hard nofile 655350
root soft nofile 655350

编译优化

官方不建议开启Hipe,速度提升的同时可能带来一些问题,如fprof不能正常使用,这里面选择部分hipe(xml),参考Speed Up Ejabberd

cd ejabberd/deps/p1_xml/src
erlc +native xml.erl
cp xml.beam ejabberd ebin

启动参数调整(安装路径默认)

编辑/etc/ejabberd/ejabberdctl.cfg

  • ERL_MAX_PORTS (默认最大32w在线)

每个到客户端(s2c)和服务器(s2s)的连接消耗一个port, ERL_MAX_PORTS定义了Ejabberd可以支持的并发连接数,默认值为32000,大并发连接场景下的应用需要增大该参数的值。这里改成3200000。

ERL_MAX_PORTS=3200000
  • ERL_PROCESSES (默认最大12w在线)

Erlang消耗很多轻量级进程, 如果Ejabberd比较繁忙, 可能会达到进程数上限, 这种情况会导致高。 当消息延迟过高时, 需要判断是否是由于该参数引起的。默认值为250000,这里改成25000000。

ERL_PROCESSES=25000000
  • Mnesia表过载

大并发时mnesia警告** WARNING ** Mnesia is overloaded: {dump_log, write_threshold},在disc_copy类型的表时,有两个参数影响出现Mnesia is overloaded: {dump_log, write_threshold}错误,默认参数是dump_log_write_threshold 50000 -mnesia dc_dump_limit 40。

dc_dump_limit:磁盘备份表从内存中被抛弃的时间间隔
dump_log_time_threshold:在新垃圾回收之前的最大的写入数

MNESIA_OPTIONS="-mnesia dump_log_write_threshold 50000 -mnesia dc_dump_limit 40"
  • ETS表个数限制问题

ets表使用的数目超过系统的限制提示:”Too many db tables”

ERL_MAX_ETS_TABLES=140000
  • 快速垃圾回收(影响不确定,不是很建议加)

按1k/sec 频率登录时,当在线到达10w时会触发gc(Major collection),在gc执行期间开销比较大(通过VTune),会引起中断,造成cpu跑满,系统响应下降。fullsweep_after控制深扫描的频率,这个参数确定多少次gc后执行一次深度gc,这里调成0,可以较快内存回收。

ERL_FULLSWEEP_AFTER=0
export ERL_FULLSWEEP_AFTER
  • Erlang 虚拟机参数(影响不确定,不是很建议加)

参考:http://www.cnblogs.com/lulu/p/4132278.html

修改/etc/ejabberd/ejabberdctl.cfg中的ERL_OPTIONS

ERL_OPTIONS="-sbt db -sbwt none -swt low"

+sbt db 绑定调度器与CPU的亲缘性
+sbwt none 关闭beam 调度器 spinlock,降低CPU
+swt low 提高调度器唤醒灵敏度,避免长时间运行睡死问题
+P 2000000 进程数限制(默认即可)
+K true 启用epoll (默认使用)
+smp auto 在多核上开启多个调度器 (默认使用)

 

ejabberd配制调整

  • 调整日志等级

修改/etc/ejabberd/ejabberd.yml

loglevel: 3
  • 堆大小监视调整

在线到达10w后cpu消耗大问题。

watchdog_large_heap: 10000000

 

内核参数调整

net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_rmem = 4096 4096 16777216
net.ipv4.tcp_wmem = 4096 4096 16777216
net.ipv4.ip_local_port_range = 1025 65000
fs.file-max = 65535000
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.core.netdev_max_backlog = 30000
net.ipv4.tcp_mtu_probing = 1

3.压测场景

  •  2k/s 登陆、认证、操作。
  • 运行2分钟后20w在线

4.结果

  • 4台tsung集群未跑满,瓶颈在服务器。
  • 服务器:未触发gc时CPU剩余30%左右。
  • 服务器:内存最高7g,登陆完后稳定3g。
  • 服务器:流量上平均收2.5m/sec,发3.5m/sec。
  • 在gc(Major collection)启动时会比较严重影响服务器响应速度,在不开启快速回收(fullsweep_after)在线达不到要求(20w),下图可以明显看到。

ejabberd_gc

 

参考资料

1.Erlang C1500K长连接推送服务-性能

http://www.cnblogs.com/lulu/p/4132278.html

2.Erlang进程堆垃圾回收机制

http://blog.csdn.net/mycwq/article/details/26613275

3.Erlang垃圾回收机制

http://www.cnblogs.com/me-sa/archive/2011/11/13/erlang0014.html

4.erlang 虚机CPU 占用高排查

http://www.cnblogs.com/lulu/p/3978378.html

分类: 缓存集群 标签: