留言板
原创文章,转载请注明: 转载自Erlang非业余研究
本文链接地址: 留言板
各位兄弟姐妹们,流言飞语都来吧, 俺不怕!
Post Footer automatically generated by wp-posturl plugin for wordpress.
原创文章,转载请注明: 转载自Erlang非业余研究
本文链接地址: 留言板
各位兄弟姐妹们,流言飞语都来吧, 俺不怕!
Post Footer automatically generated by wp-posturl plugin for wordpress.
霸爷,这个blog是咋整的?
要申请独立域名么?
[Reply]
Yu Feng Reply:
March 8th, 2011 at 9:51 pm
申请个独立域名再申请个空间,找个人合用,差不多1年7-8百?
[Reply]
记得 余锋 介绍过gprof的一些用法,我在网络搜索过程中发现了几个好工具:
valgrind –tool = callgrind & kcachegrind
也很不错。有空请也介绍介绍其详细用法。
[Reply]
在网龙呆得怎么样》?游戏上线了吗?在哪里可以玩到?
[Reply]
Yu Feng Reply:
March 25th, 2011 at 2:10 pm
那是很久以前的事情了.
[Reply]
霸爷,挺你来了!
[Reply]
汗。。。。锋爷也跑杭州去了吗?
[Reply]
希望老大把在erlang项目中使用lua的例子分享一下,我一直想把lua应用在erlang上,但一直不知道怎么个用法!
[Reply]
Yu Feng Reply:
May 30th, 2011 at 10:46 am
其实lua更多的是用于c项目的灵活性配置,或者需要用户参与的地方。
[Reply]
余老师,我刚学erlang,想请教一个问题。我用erlang试做一个登陆系统的时候,想加一个动态验证码,但是我发现erlang里好像没有生成动态图片的函数。网上有一个GD库的erlang绑定,但好像用起来并不像PHP里面那么方便。
我想问一问有没有其他方案可以绕过去,比如利用PHP生成图片,然后再传给erlang,或者直接用PHP生成注册登陆系统,erlang做他擅长的事情。
[Reply]
Yu Feng Reply:
June 14th, 2011 at 11:05 am
可以在php代码在生成图片的同时,通过http通知erlang模块inets或者mochiweb,告诉它图片的内容。
[Reply]
wordpress 技术博客路过。
在ppt文档看到你博客。 mysql调优。
[Reply]
Yu Feng Reply:
June 15th, 2011 at 12:15 pm
谢谢关注!
[Reply]
如题
[Reply]
Yu Feng Reply:
July 20th, 2011 at 8:04 pm
肯定支持呀,lvs的作者就是我老大,我们的cdn大量用
[Reply]
老兄:
几年前,你发过一个帖子。http://www.iteye.com/topic/105086
关于FMS的性能问题。
请教一下,您最后所说的“竞争对手的产品 2000个连接的时候cpu才30-40”,指的是RED5,还是其他竞争对手?
[Reply]
Yu Feng Reply:
July 29th, 2011 at 2:53 pm
red5
[Reply]
马亮 Reply:
July 29th, 2011 at 4:07 pm
近期来看,貌似FMS性能比RED5好。 RED5是java写的嘛,一直很担心其性能。而FMS底层应该是C++写的。
我其实很想知道那些大网站比如youku,tudou用的是什么流媒体服务器?还是根本就是http方式访问?
[Reply]
Yu Feng Reply:
July 29th, 2011 at 4:23 pm
近期听说fms换了个帮子写代码,质量好很多了。。。
强大峰哥,baidu、google一下,除了爱立信那三个人的资料,就是你的最多了,
[Reply]
这些天在学习erlang,先看完erlang programing,然后就查erlang VM的资料学习,和smp、Process绑定调度器还是绑定cpu核,等资料;
感谢峰哥的贡献!
[Reply]
hi yufeng,
学习erlang有一段时间了,随着学习的深入,问题也越来越多,以前很多不懂得地方google, baidu到的solution大部分是你和litao cheng的,最近刚刚利用sasl把代码的热升级,降级搞好了,整合到了系统中,对于热升级的具体实现,我猜测erlang虚拟机内是否维护了old_code & new_code的两个指针,指向正确的代码地址. 代码的第一个版本编译后,old_code = null, 热替换成版本2后,old_code指向版本1, new_code = current, 然后编译器需要更新global export table, 根据函数调用方式M:F()
或者F()来确定代码地址?
[Reply]
Yu Feng Reply:
August 10th, 2011 at 11:17 am
对的,erlang代码是这样升级的,除了这个还有驱动程序动态库以及erts自身的升级,不大相同。。。
[Reply]
expp Reply:
August 11th, 2011 at 2:47 pm
动态库和erts自身如何实现的?
我有很多问题别说中文了,英文的资料都少的可怜,有些在老外的邮件列表里能找到答案,
其他的估计只能自己研读source code了,
在emulator/beam里找到了如下的数据结构
typedef struct erl_module {
IndexSlot slot; int module;
BeamInstr* code;
BeamInstr* old_code;
int code_length;
int old_code_length;
unsigned catches, old_catches;
struct erl_module_nif* nif;
struct erl_module_nif* old_nif;
} Module;
看来 BeamInstr* code; BeamInstr* old_code; 就是干这事的……
[Reply]
顶 霸爷!
PS1 : 大连校招时被你面试过一面。
PS2 : 我们的博客风格好雷同啊….
[Reply]
Yu Feng Reply:
October 12th, 2011 at 1:15 pm
这么巧?
[Reply]
nash635 Reply:
October 12th, 2011 at 4:55 pm
PS3:我学弟在你们部门工作
[Reply]
我想问一下,为何我用tsung测Mysql就会出1043错误呢?哪怕是最简单的show tables。我的tsung版本是1.4.1,mysql版本是5.1.59-community
[Reply]
Yu Feng Reply:
October 16th, 2011 at 10:13 am
方便的话,麻烦把步骤和出错信息发email给我. 当然你也可以 If you add the attribute dumptraffic=”true”, all the traffic will be logged to a file. Warn: this will considerably slow down Tsung, so use with care. It is useful for debugging purpose. 参看这里: http://tsung.erlang-projects.org/user_manual.html
看日志就知道什么原因了。
[Reply]
你好!请教一个问题:在mysqldump的文件中有大量的注释(不知是否为hint)里边的内容包含数字:
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE=’+00:00′ */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE=’NO_AUTO_VALUE_ON_ZERO’ */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
请问这些数字有什么含义?
[Reply]
请问可以详细讲一些针对mysql执行计划比较,sql优化方面的吗?
[Reply]
峰哥,我现在用ejabberd做手机服务器,因为ejabberd没有像java那样的preparestatement.
所以在插入数据库的时候需要拼成一条SQL语句,在拼成一条SQL语句的时候如果数据中含有单引号” ‘ “,或者分号”;”,那就比较悲剧了,直接可以做SQL注入,系统无半点安全可言啦,请问您有没有遇到过同样的问题,指点一下迷津,呵呵.
[Reply]
Yu Feng Reply:
November 21st, 2011 at 5:03 pm
不能改写ejabberd吗?
[Reply]
刘峰林 Reply:
November 21st, 2011 at 5:13 pm
目前想到的方案是在ejabberd中做字符串替换,把特殊字符都处理一下,但这样效率肯会比较低,呵呵
[Reply]
Yu Feng Reply:
November 21st, 2011 at 5:17 pm
这个貌似很不优雅。。。
刘峰林 Reply:
November 21st, 2011 at 5:54 pm
英雄所见略同,虽然达到目的,但这手段太劣了点
余老师,你好:
我现在在调试一段erlang服务器的一段程序,遇到一个很奇怪的问题,当程序运行一段时间的时候,在程序中调用receive。。。after的这样的语句时,如果接收不到消息,这个进程就会一直阻塞在那里,及根本不会超时,当我调用timer:sleep/1这样的函数的时候,这个进程也会一直睡觉。当我在另外一台测试服务器上测试的时候却是好的。这两天服务器环境都是一样的。请问余老师以前遇到这样的问题没有,应该怎么来找原因呢?
[Reply]
Yu Feng Reply:
November 24th, 2011 at 3:20 pm
用dbg模块跟下消息,我博客里有
[Reply]
qinlinwang Reply:
November 24th, 2011 at 4:50 pm
关键是实在执行receive这个语句出不来了,理论上应该在after后面规定的时间内醒来的。
receive这是个关键字语句,怎么跟踪呢?
[Reply]
Yu Feng Reply:
November 24th, 2011 at 5:58 pm
那还是把语法好好学学吧
qinlinwang Reply:
November 24th, 2011 at 6:00 pm
额,语句写的应该是没有问题的,而且代码再另外一个同样环境的的机器上是好的,不知道在这台为啥就不行
我想问下,在erlang中如何打印函数的调用栈?,
我经常在处理逻辑的时候,读入了一个非法的参数
,但是我不知道是哪个模块调用了该函数并传入该参数,我想打印出调用的栈过程,
[Reply]
Jovi Reply:
December 26th, 2011 at 10:22 am
erlang:process_info(self(), current_stacktrace).
erlang:process_display(self(), backtrace).
erlang:process_info(self(), backtrace).
[Reply]
Yu Feng Reply:
December 26th, 2011 at 8:25 pm
erlang的自省机制很发达~
[Reply]
余老大,看你对erlang非常熟悉啊。最近刚学erlang,想问一下有没有简单点erlang开源程序可以学习?erlang的语法真是用起来变扭,需要看一些人家写代码来提升一下。谢谢!
[Reply]
Yu Feng Reply:
December 26th, 2011 at 7:59 pm
https://github.com/basho/rebar 非常不错的学习材料,严谨,易学。
[Reply]
Jiecong Reply:
December 27th, 2011 at 8:00 pm
谢了,余老大
[Reply]
霸主,你好.我刚刚学习erlang,去实习然后老大要求我用erlang正则匹配一个1.8g,有10800000行记录的日志文件.不过目前我自己尝试的两种方式是一种用多进程pread,然后每个进程自己分析自己的部分,然后把片段的头尾(就是不成一行的)和匹配数发到Collector进程,这种方式,不做匹配时59770ms,做匹配是82283ms,另一种是用多个进程不断向一个File句柄read_line,读出一行后马上本进程内匹配,然后把结果发给Collector,一直读到eof.这种方式不做匹配是70167ms,做匹配是90917ms,匹配的只是一个测试的正则,就”.*”,然后,想问一下你觉得这两种方案怎么样?我的机器是Dual-core e5800 3.2G,2g内存.而且对于正则有没有什么好的意见,感觉erlang的正则挺慢的.
[Reply]
Yu Feng Reply:
January 12th, 2012 at 7:12 pm
时间主要花在读文件上。
[Reply]
Yu Feng Reply:
January 12th, 2012 at 8:34 pm
文件要用raw方式打开,然后一次读一段出来,比如64K, 然后用regex处理,多个进程进行,然后汇总。会写的根本不慢。
[Reply]
ClarenceAu Reply:
January 12th, 2012 at 10:14 pm
我现在是用binary,我回去再试试用raw。然后你觉得就以这个配置,这个时间你觉得是正常还是太慢了?就是普通台式,cpu和内存我写在原文了。其实时间应该是花在处理读出来的数据上。我试过,用多进程读,然后就读文件用不做任何处理是大概15秒。我觉得就读文件的话,15秒应该是可以接受的速度吧?
ClarenceAu Reply:
January 12th, 2012 at 10:20 pm
你说的raw打开,就是说,我只用一个进程去每次读一大段,然后spawn一个处理的进程去处理?因为raw模式打开不是只能在该线程本身去读吗?
Yu Feng Reply:
January 13th, 2012 at 1:43 pm
把文件的大小按进程数目划分,每个进程负责offset, offset+size这么大的区间,分别自己raw方式打开文件,每次读取一个chunk,然后再regex,这样应该比单线程的c程序快N倍。
霸主,再问你一个小小的问题.就是我看erlang的书说,atom是不会被gc的,那在实际项目中会不会很容易就会由于atom太多而导致内存占用过高或者内存泄漏的问题.
[Reply]
Yu Feng Reply:
January 14th, 2012 at 12:45 pm
atom有上限制的,超过了vm已经崩溃,不用考虑gc的事情了
[Reply]
ClarenceAu Reply:
January 17th, 2012 at 10:52 am
霸主,能解释一下ERL_FULLSWEEP_AFTER这个参数的意思吗?我看过你的一篇文章里提到过,但是不是很明白.然后,就是在Erlang的文档里,哪里可以看到所有这些参数的说明?谢谢.
[Reply]
Yu Feng Reply:
January 17th, 2012 at 2:10 pm
由于erlang的gc是mark and sweep的标准gc, 通常gc的时候是minor的,就是每次回收点点就好。这个参数的意思是多长时间后进行一次大扫除,全量GC。 注意erlang的回收是针对每个进程进行的。
霸主,我终于解决了之前那个大日志的问题了.竟然是因为我的正则表达式的一点小bug,导致平均每条匹配时间多了5倍,10000k条记录!!那个时间啊.不过对于正则我觉得在使用的时候真得要多加注意.要根据具体实现来写合理的表达式.
[Reply]
Yu Feng Reply:
January 17th, 2012 at 5:32 pm
恭喜,数据说话!
[Reply]
ClarenceAu Reply:
January 17th, 2012 at 5:45 pm
1.6G日志文件,10000k+条记录,在我的普通台式上,2G内存,Dual-Core E5800 3.2G主频,匹配完成后,时间是用了231秒.不知道这算不算好成绩.我的主管说我能跑到300秒以内就算可以了.
[Reply]
Yu Feng Reply:
January 17th, 2012 at 6:18 pm
多核上运行应该快很多~
霸主,我发现erlang里有个binary的module,它里面提供的那些函数很象是一些使用binary来作匹配的的函数,请问那个module里可以用正则表达式吗?还是只是简单的pattern matching?
[Reply]
Yu Feng Reply:
January 20th, 2012 at 11:41 pm
re模块支持binary
[Reply]
余锋老大,请教个问题:
我有这么个应用场景:一个程序每秒10万包(每包512字节)的速度写共享存储(GFS2文件系统),另外2个程序监控这个文件,当发现有新的数据写到这个文件后,立即读取出来,这三个程序分别在不同的主机上,要求:
1,写RTT在100us以内;
2,2个读程序的读最新数据的延迟不超过1秒(即写程序写完一块数据后,读程序侦测到,并读到自己内存中的时间);
您看这个能不能实现?如果能的话,需要什么样的硬件?我要申请买设备了,谢谢!
[Reply]
Yu Feng Reply:
February 1st, 2012 at 10:41 am
按照你的描述,你的包不是很大,fusionio二代卡在典型的512字节写入的速度在每秒10万以上,写入延时在20-30us,所以距离你的100us是够的。考虑到容量,可以用flashcache做cache,大大减少成本,还能满足你的性能需求。 文件的变更linux有notify接口,可以保证很快的读到数据,1秒足够的。
[Reply]
rock Reply:
February 1st, 2012 at 11:43 am
老大,用flashcache的话,数据还能及时到达共享存储吗(比如说SAN)?读这边的及时性会不会不好?
另外,我这个应用的写方类似于数据库的提交事务日志的操作,要求写返回成功后,掉电、文件系统crash等这个数据都不会丢失,即写的时候是fsync方式的,你看fusionio二代能够满足吗?
[Reply]
Yu Feng Reply:
February 1st, 2012 at 11:50 am
1. 用flashcache不能及时,所以san读会有问题。
2. fusionio一代和二代都满足这个不丢数据的约束,我们用了很多,1年多了没有发现问题。
rock Reply:
February 1st, 2012 at 11:50 am
老大,还有fusionio二代卡有成功应用的案例吗?比如说淘宝?我在证券开发行业,对技术的成熟度要求非常高
Yu Feng Reply:
February 1st, 2012 at 11:52 am
我们核心的数据库的对技术的成熟度也是非常高~过几天我们就会拿到卡测试。如果担心的话,可以用一代卡~
rock Reply:
February 1st, 2012 at 11:52 am
谢谢,老大,我测试过很多盘,buffer io时性能很好,direct io就挂了,好了,那我就买fusionio吧,非常感谢!
Yu Feng Reply:
February 1st, 2012 at 11:58 am
Amy: fusionio的销售email: tongouou@gmail.com
rock Reply:
February 1st, 2012 at 12:22 pm
谢谢,余大哥,已经发邮件给Amy了。
我们这个场景要求的是3台主机共享的存储,而且要使用类似GFS2这样的共享文件系统,有分布式锁,真不知道还是否能够达到这个要求,咳,愁啊,测试下吧。
Yu Feng Reply:
February 1st, 2012 at 1:10 pm
GFS2文件系统稳定靠谱吗?
rock Reply:
February 1st, 2012 at 12:24 pm
另外,余大哥,针对俺这个应用,如果你有更好的实现方案,不吝赐教啊:)
rock Reply:
February 1st, 2012 at 1:34 pm
是啊,GFS2的稳定性不好说啊,但是需求要共享存储,读写同个文件,还有别的办法吗?NFS也试了。。。