使用javamail发邮件

使用javamail发邮件。 javamail是java发邮件的常用工具。方便实用。 1、首先使用maven工程,需要引入对javamail的依赖,取个最新稳定版本: javax.mail mail 1.4.5 2、构造一个Session。所谓Session,可以理解为对SMTP服务器的配置。如果发邮件的全部都是一个配置,这个是可以单例的。 Properties props = new Properties(); props.put("mail.smtp.host", "smtp.163.com");//smtp服务器 props.put("mail.smtp.auth", "true");//是否需要用户名密码鉴权 props.put("mail.transport.protocol", "smtp");//协议名称 props.put("mail.smtp.socketFactory.port", 25); //服务器端口 props.put("mail.smtp.starttls.enable", "true"); //如果是ssl端口,需要加这个属性。 //创建Session。这个取一次就好了, Session session = Session.getInstance(props, new Authenticator() //如果你只有一个发送邮箱,在这里指定就好了,如果你有多个用户名密码,也可以在正式发邮件的时候指定。 { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("zhaoyan", "zhaoyanblog.com");//用户名和密码, } }); 3、获取一个连接发送邮件: Transport transport = null; try { transport = session.getTransport("smtp"); //这里是不能单例使用的,可以看Transport的实现类SMTPTransport, //有几个成员是:private MimeMessage message; private Address[] addresses; private SMTPOutputStream dataStream; 说明每次发邮件都会存这些东西的,这个类是线程不安全的。 transport.connect(); //如果session里没有指定用户名密码,这里可以使用transport.connect("username","password"); MimeMessage message = createMessage();//构造邮件内容 transport.sendMessage(message, new InternetAddress[]{new InternetAddress("zhaoyan@zhaoyanblog.com")}); //如果你的message里指定了接收方,这里也可以写transport.sendMessage(message); } finally { transport.close(); } 4、发送不同类型的短信 ...

2015年12月23日 · 1 分钟

JAVA实现多语言

做web服务器,为了实现全球业务,服务器端就要实现多语言。针对不同的国家、语言。返回不同语言的描述。 第一:JAVA对多语言是支持的 JAVA对语言的描述使用java.util.Locale,它主要包含语言、国家信息。 例如几个常量, 中国的简体中文: Locale SIMPLIFIED_CHINESE = createConstant(“zh”, “CN”); 台湾的繁体 Locale TRADITIONAL_CHINESE = createConstant(“zh”, “TW”); 也可以只包含语言信息: Locale CHINESE = createConstant(“zh”, “”); 以上几种语言,用字符串写就是zh_CN, zh_TW, zh(也有用中划线的)。 第二:语言资源文件 你可以在i18n目录(或者是com/zhaoyanblog/i18n, com/zhaoyanblog/i18n/resource, 这个是类路径)下为每一种语言创建一个资源文件。命名格式如下: lang_zh_CN.properties lang_zh_TW.properties lang_zh.properties 再创建一个默认的语言对应的资源文件: lang.properties 注:这里的文件名lang和路径都可以随便起。为什么路径要包含i18n,这个就是个习惯,随便你。i18n的意思就是国际化(internationalization, i和n之间有18个字符)。 资源文件里配置不同的配置 lang_zh_CN.properties里: TITLE=我的苹果 lang_en.properties里: TITLE=my apple 配置文件为了防止乱码,properties文件里3个字节以上表示的字符(例如中文)一般使用unicode配置。 TITLE=\u6211\u7684\u82f9\u679c 第三:读取配置文件的内容 JAVA加载语言资源文件使用java.util.ResourceBundle类。 ResourceBundle lang = ResourceBundle.getBundle(“com.zhaoyanblog.i18n.resource.lang”, Locale.SIMPLIFIED_CHINESE); lang.getString(“TITLE”) 返回的就是我的苹果 第四:HTTP协议的多语言支持。 HTTP协议规定了一个header:Accept-Language支持多语言。多少客户端期望返回的语言类型。 格式如下: Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3 q=0.8代表前面语言的比重。如果有中文就返回中文,没有中文就返回美式英文。再没有就返回中文。 第五:java web应用,获取客户端需要的语言。 servlet的HttpServletRequest参数对象里可以得到对Accept-Language的解析结果。 protected void service(HttpServletRequest req, HttpServletResponse resp) { Locale locale = req.getLocale(); }

2015年12月15日 · 1 分钟

荣耀4C 拍照样张

2015年12月8日 · 0 分钟

谨防黑客攻击wordpress的xmlrpc.php

最近两天随便瞟了两眼机器的负载,发现飙升到了0.6了,我的博客一向访问人很少,即便是1CPU1G的配置,负载也不会这么高的。仔细看了apache的access日志。发现大量的访问xmlrpc.php的请求。 167.114.89.173 - - [22/Nov/2015:04:52:29 +0800] "POST /xmlrpc.php HTTP/1.0" 200 370 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)" 192.99.196.123 - - [22/Nov/2015:04:52:33 +0800] "POST /xmlrpc.php HTTP/1.0" 200 370 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)" 192.99.196.123 - - [22/Nov/2015:04:52:39 +0800] "POST /xmlrpc.php HTTP/1.0" 200 370 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)" 167.114.89.173 - - [22/Nov/2015:04:52:41 +0800] "POST /xmlrpc.php HTTP/1.0" 200 370 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)" 167.114.89.173 - - [22/Nov/2015:04:52:49 +0800] "POST /xmlrpc.php HTTP/1.0" 200 370 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)" 167.114.89.168 - - [22/Nov/2015:04:52:49 +0800] "POST /xmlrpc.php HTTP/1.0" 200 370 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)" 192.99.196.123 - - [22/Nov/2015:04:52:51 +0800] "POST /xmlrpc.php HTTP/1.0" 200 370 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)" 192.99.196.123 - - [22/Nov/2015:04:52:58 +0800] "POST /xmlrpc.php HTTP/1.0" 200 370 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)" 167.114.89.168 - - [22/Nov/2015:04:52:58 +0800] "POST /xmlrpc.php HTTP/1.0" 200 370 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)" 167.114.89.168 - - [22/Nov/2015:04:52:58 +0800] "POST /xmlrpc.php HTTP/1.0" 200 370 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)" 167.114.89.173 - - [22/Nov/2015:04:53:04 +0800] "POST /xmlrpc.php HTTP/1.0" 200 370 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)" 167.114.89.173 - - [22/Nov/2015:04:53:07 +0800] "POST /xmlrpc.php HTTP/1.0" 200 370 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)" 之前也看到过类似的请求,第一眼看到User-Agent包含Googlebot/2.1,http://www.google.com/bot.html等关键字,以为是google的爬虫,没有太留意。今天仔细看了下,发现并非如此,这样的访问是大量连续存在的,而且存在多个ip地址。都是POST请求到xmlrpc.php。抓包看内容完全一样的。百度下ip大都是芬兰啊,加拿大等国外的,也没有迹象表明是google的ip。google爬虫也应该不是这样的行为,所以果断屏蔽。之前使用虚拟机,只能在apache和php层。这次使用的独立主机,最直接的的方式就是在防火墙上屏蔽它们。 ...

2015年11月22日 · 2 分钟

华为麒麟950,用户真正需要的芯片

前日,华为在秋季媒体沟通会上发布了备受瞩目的麒麟950。集成麒麟950的手机在安兔兔跑分达到了8万多分,成为目前全球最强劲的移动芯片。 看一下麒麟950相较于前面的版本有哪些加强和改进: 1、最新ARM架构和GPU 麒麟950采用最新的4A72+4A53的big.LITTLE架构。A72比A57性能提升11% 功耗降低20%。 GPU采用最新的MaliT880,图形生成能力提升100%,GFLOPS提升100%。 2、最新的16nm FF+工艺 在制程工艺方面率先采用业界领先的TSMC 16nm FF+工艺,是首个商用16nm FF+工艺的SoC芯片,相比28nm HPM,性能提升40%,同时节省了60%的功耗。 3、全新协处理器i5 麒麟950芯片拥有全新升级的新智能感知处理器i5,业内首次实现芯片级智能定位。 4:自研ISP模块。 搭载的ISP也源自华为自研技术,由于支持14bit双ISP,吞吐率性能直接提升达4倍。并且支持混合对焦技术。 5:采用4G VoLTE技术,使通话更真实。 通过扩展频谱范围和提高采样率,还原更接近人声的真实音色。让你感觉他或者她就在你身边一样。 有人还在喷麒麟950没有集成支持Cat 9、cat10 cat12(4G传输技术等级)的基带,华为的回复是,目前国内运营商对Cat 6的覆盖尚且没有完成,支持更高级别的技术对用户是没有意义的。我是支持这个观点的,换句话说,给你加上了这样的技术,你也用不上,用户还要为这样的成本买单。华为是务实企业,以用户为中心,想用户所想。 如此强大的芯片,已经横扫市面上所有的其它产品,也是用户真正需要的芯片,我们拭目以待搭载麒麟950的Mate 8手机横空出世,据媒体猜测11月26日将发布。

2015年11月10日 · 1 分钟

[新闻]要买荣耀手机,趁在双十一

从十一月一日开始,华为荣耀vmall商城正式启动双十一模式。每天都有开放购买,还有抵用券券,红包一大波优惠。所以如果你想入手一部手机,可以考虑买华为荣耀,如果你打算买荣耀手机,最好趁在双十一期间。且看华为荣耀有哪些大动作: 第一条:荣耀这次为双十一准备了400万现货,所以如果你想买,肯定可以买到的。 第二条:2亿红包,总可以赚得几十到两三百的优惠。 第三条:降价优惠,荣耀6预存99元可以当299元使用,1099元的全网通版4X只卖999。更多优惠去看华为商城。 第四条:配置1元起,你可以在这段时间,通过1元钱、一折、5折的优惠价格买到你心仪的手机配件。 第五条:秒杀活动,11月1日-11月10日 每天有三场秒杀活动,每场活动11.11元秒杀多款产品。也就是如果幸运的话,你可能相当于免费得一部手机。 此外华为商城还提供以旧换新送优惠券,约“惠”合约机,购机抽奖等多项活动。 所以买华为荣耀手机,就要趁双十一,在双十一期间买荣耀手机最划算。

2015年11月3日 · 1 分钟

One More Thing,惊喜不仅仅是5X

之前的亿元年薪,可能大家都猜对了,我估计也是大熊猫,至于亿元年薪,华为荣耀可能启动一项保护大熊猫的公益活动,想必是这样的吧,华为荣耀就是有爱啊。 一场发布会仅仅发布一款手机,往往显得单调,所以华为荣耀的发布会除了发布手机以外,经常会同时发布至少一款其它产品,例如之前发布会发布的荣耀盒子,荣耀电力猫,荣耀小口哨,荣耀引擎耳机,手环,儿童手表等等。 本次荣耀5X发布会也是不仅仅发布一款手机,近日@华为荣耀官方微博发出多张海报,借助乔布斯的一句惯语:“one more thing”,惊喜不仅仅是5X。根据多张海报来看,除了5X之外,可能还有不止一款产品要一同发布: 海报具体是一个放映机和一个打字机,那到底是什么产品呢?具体期待10月27日 华为荣耀成都发布会。

2015年10月24日 · 1 分钟

[新闻]华为荣耀5X即将发布、一亿年薪聘请大咖代言

华为荣耀4X自发布至今销售量已经过千万,如此爆款,华为没有理由不发布后续机型。这么10月27日华为荣耀将要发布4X的继承者:华为荣耀畅玩5X。 荣耀4X之所以被追捧,我想有这样几个特点: 屏幕5.5寸,2G内存。1300万像素摄像头,3100大电池容量。全网通(千元机中全国首款),外观好看(特别是摄像头的设计) 我想荣耀5X如果想继续热卖,势必要继承4X的上述优势,同时弥补不足. 例如:增加存储空间(ROM)到16G或者32G。 当然也要加些新料 例如:移动联通版增加NFC功能,甚至增加指纹识别,再者变为金属机身等等。 至于华为荣耀到底如何打造这款手机,还要等27号发布会公布。 此外还有一个官方微博发布的消息: 华为荣耀一亿年薪聘请神秘大咖代言#荣耀畅玩5X#,一起放肆#玩过界#! 并展开了竞猜有奖的活动,一亿年薪请一个大咖代言一款具体的机型,这还是华为前所未有的大手笔。 此前陈坤是作为了华为荣耀品牌的代言人,这次肯定不是它,到底是谁呢?@华为荣耀官方微博每天一张海报公布线索。快去猜吧。

2015年10月17日 · 1 分钟

评说华为荣耀千元机,我需要的完美在哪里

华为荣耀从荣耀3C火起之后,一直都很重视低端机市场。先后出了荣耀畅玩4 畅玩4X 畅玩4A 畅玩4C等机型。甚至今天以华为的LOGO出了一款畅享5。 我一开始买了一款荣耀3C,使用一年多,除了边角有磕碰,一直使用至今没有功能性问题。足以可见华为的做工和质量。 但是人的欲望是会随时间膨胀,人会喜新厌旧的,我现在发现荣耀3C的内存太小了,只要1G。自带ROM也太小了,只要4G,系统占去一大半,可用空间只要不到2G。随着安装的应用越来越多,总是感觉空间不足,运行不是那么流畅。是时候该淘汰这部手机,买一款新机器了。 畅玩4,这款外貌不出众的机型,老掉牙的货物,摄像头只要800万像素,前置摄像头200万,电池只有2000mAh,内存仍然只要1G 肯定不在考虑之列。 畅玩4A,外貌还好,就是我不喜欢圆角的手机,我比较喜欢四四方方的。内存2G还好。摄像头只要800万像素,前置摄像头200万。电池也不大,只有2200mAh。不在考虑之列。 剩下的就是畅玩4X和4C, 两款手机都是2G内存,1300万像素摄像头。模样也差不多,特别是摄像头的机器人造型。 4C的ROM是16G(增强版),这个是比较赞的。 就是电池小,只有2550mA。 屏幕只有5寸,还可以接受。此外还有一个大黑边是诟病。特别是白色版。 4X的屏幕是5.5寸,电池有3000mA。唯一可惜的是ROM只有8G,系统占了一半。只有4G不到的可用空间。除此之外,4X没有太大的遗憾。有出色的外观和配置,持久续航,怪不得这款手机可以卖到1000万部。 此外4C和4X只有电信版的有NFC,只有全网通的有金色版。 再看最新出的畅享5.可能就是为了解决纠结这两款手机的用户打造的: 5寸屏幕,4000mA电池 16G的ROM 2G内存 1300万像素 在我心中完美的千元机是这样的: 4C/4A的外观。上下和黑边框都再小一点。 5寸或者5.5寸屏幕 16G的ROM 2G内存 后1300万 前500万像素 3000MA电池 移动4G 支持NFC。

2015年10月10日 · 1 分钟

写个定时任务每天向百度提交新链接

百度蜘蛛的爬行是有周期性的,你当天写的文章,百度可能几天后才会收集到。为了让百度早点收录新写的文章,我们可以向百度主动提交当天的新链接,百度站长可以每个月主动提交500个链接。 首先写个脚本push.sh #!/bin/sh CURRENT_DIR=$(dirname "$0") MYSQL_USERNAME="xxxxxx" MYSQL_PASSWORD="xxxxxxxx" MYSQL_DATABASE="xxxxxxx" MYSQL_CMD="/usr/bin/mysql" #百度链接提交地址,在百度站长里可以找到 BAIDU_COMMIT_URL="http://data.zz.baidu.com/urls?site=zhaoyanblog.com&token=xxxxxxx" #找出今天所有发布的文章,post类型代码文章,publish状态表示发布状态的,排除草稿。 today=`date "+%Y-%m-%d 00:00:00"` ids=`$MYSQL_CMD -N -u $MYSQL_USERNAME -p$MYSQL_PASSWORD $MYSQL_DATABASE -e "select ID from wp_posts where post_type='post' and post_status='publish' and post_date>'${today}';"` if [ ! -n "$ids" ]; then exit; fi #把文章地址输出到一个临时文件里 cd $CURRENT_DIR rm -rf urls.txt for id in $ids; do echo "http://zhaoyanblog.com/archives/$id.html" >> urls.txt; done #提交给百度 curl -H 'Content-Type:text/plain' --data-binary @urls.txt "$BAIDU_COMMIT_URL" 然后在crontab里添加定时任务,每天晚上11点50执行: 50 23 * * * /bin/sh /home/zhaoyanblog/push/push.sh 2>&1 1»/home/zhaoyanblog/push/push.log

2015年9月30日 · 1 分钟

尘埃落定,2K屏弊大于利

在今年年初余总和小米展开了一场关于2K屏的讨论,余总认为在6寸屏幕之下,人眼是几乎无法分辨2k屏和1080p的。而且2k屏会造成手机功耗大,电池续航能力减弱。目前2k屏成本和1080p相差无几,华为坚决不上2k屏,是为用户体验着想。当时小米一众加V,对余总和华为加以讽刺。 时至今日,我们再看各大厂商和群众对2k屏的态度。 首先是魅族,魅族MX4 PRO是最先上2K屏的国产厂商。魅族MX4 PRO在MX4发布2两个月之后就发布了,我想魅族MX4 PRO是在MX4因为用了联发科的廉价芯片,被用户哄抬出来,短时间内上线的一款应急产品。相比魅族MX4,魅族MX4 PRO把CPU从联发科转为三星, 屏幕从5.3寸转为5.5寸 2K屏。内存从2G转3G。以此提高性价比。但是2K屏幕带来的困扰就是续航不足, 为用户诟病,以至于魅族副总裁李楠公开认错,他坦言魅族过去在产品上激进的使用2K屏幕是个错误。最新高端子品牌PRO在PRO 5回归1080p屏幕。 再看小米Note,小米向来标榜为发烧而生,其小米note顶配版悍然配置了高通骁龙820芯片和2K屏幕。一个发热大户,一个耗电大户,而电池只有3100mA,续航能力不言而喻,价格又在3000元左右,那销量可想而知。 再看行业领导者苹果,2k屏其实已经出来好久了,但是至最近发布的iphone 6s plus,屏幕分辨率也是1080p,苹果也并没有选择从分辨率上做文章,而是配置了为用户能带来更好体验的3D touch技术。苹果作为最注重用户体验的公司之一,再加上iphone如此高的售价和利润,元器件的选择应该不会太受成本限制,这说明至少在苹果看来2k屏并不能为用户体验带来什么质的提升,相反可能会带来糟糕的体验。 从以上事实看,屏幕2k屏目前并未成为大众消费者选择手机时考虑的一个因素,相反甚至有些消费基于续航考虑,并不会去选择配备了2k屏的手机。 余总讲1080p和2k屏幕,在6寸屏以下用户难以分辨,是以事实为依据的,分辨率不是越高越好,相反人眼对屏幕的饱和度和亮度很敏感。华为今年接连发布了P8\P8 Max\荣耀7\荣耀7i\Mate S等中高端机型正是朝着这样的方向上提升,余总的选择是明智的。 我在这里再预测小米迟迟不出的下一代手机会采用1080p屏幕,你认为呢?

2015年9月27日 · 1 分钟

荣耀里程碑,4X破千万

重磅消息:#荣耀畅玩4X#成为荣耀家族首破千万销量单品,荣耀4X能有这样的销量,一点不意外,因为荣耀4X是国内首款全网通千元机型,还有金色款。电池容量大3100毫安,2G内存,保证了续航和流畅度,同时它的外观也很出众,机器人灵感的摄像头在千元机中算是漂亮的。 荣耀4X价格最便宜的是移动高配799,最贵的是全网通版999元,初始价格在1299.这并不是一款超低端的手机,所以能卖到千万部是难能可贵的。 最近的一款荣耀畅销机是荣耀4C,最近存储空间从8G升级到了16G,而价格没有改变,仍然为799,造型配置都和4X很接近,相信它或将成为荣耀下一个千元机型。荣耀手机的热卖,代表着用户对荣耀品牌的信赖,说明荣耀的品质得到了用户认可。荣耀手机的热卖不是一个现象级的,它是被用户持续肯定,口碑相传的结果。 荣耀4X在2014年发布,至今仍然很火,前几天我还买了两部准备十一带回家,因为我纵观所有千元机型,发现荣耀4X确实属于性价比较高,又有颜值的一款手机, 看几张官方照片,狠有购买的冲动吧? 只要799元啊

2015年9月26日 · 1 分钟

elasticsearch如何安全重启节点(续)

之前分享的一篇文章介绍了如何滚动rolling重启elasticsearch集群。但是当数据量很大的时候,可能那种方式并不适合修改整个集群的配置。 如果你无法通过api更改集群属性,还是建议你把整个集群关闭,重启整个集群。 重启步骤如下: 1、关闭整个集群 curl -XPOST ‘http://IP:9200/_cluster/nodes/_shutdown’ 2、修改你要修改的配置项,或者是升级elasticsearch版本。 3、修改每个节点配置文件: 配置: gateway.expected_nodes: 10 gateway.recover_after_time: 5m gateway.recover_after_nodes: 8 minimum_master_nodes: 2 以上参考:http://zhaoyanblog.com/archives/745.html 配置:bootstrap.mlockall: true 以上参考:http://zhaoyanblog.com/archives/826.html 4、线启动master节点,再依次启动所有的其它节点。 5、查看集群状态,直到所有节点加入集群,变为green状态 curl ‘http://ip:9200/_cluster/health?pretty=true’ 这 因为第三步的配置,这个过程会很快,即便数据量大,顶多几分钟的事情。

2015年9月21日 · 1 分钟

Cassandra双中心节点要配置keepalive

在低流量的间隔,防火墙的设置会把长时间闲置的链接关闭,导致本地节点和其它datacenter的节点之间失去联系。链接闲置超时时间一般被网络管理员设置为60分钟。 所以Cassandra在创建双中心的时候,中间传输数据会经常超时,如果你不设置系统的keepalive的话。 配置系统的keepalive,首先通过 sysctl -A | grep net.ipv4 查看系统内核参数: net.ipv4.tcp_keepalive_time:链接闲置多久之后开始探测链接(秒),也可以理解为keepalive发送第一个请求的间隔时间。 net.ipv4.tcp_keepalive_probes:链接发送探测请求多少次之后认为链接失效 net.ipv4.tcp_keepalive_intvl:每次发送探测请求中间间隔多久(秒) 你可以使用以下命令临时更改系统内核参数(重启失效) sysctl -w net.ipv4.tcp_keepalive_time=60 net.ipv4.tcp_keepalive_probes=3 net.ipv4.tcp_keepalive_intvl=10 也可以编辑/etc/sysctl.conf 文件之后,使用sysctl -p 命令让配置永久生效。 这个命令把keepalive的超时时间设为了60秒,间隔10秒探测3次。这个设置可以在90s(60+10+10+10)后探测到死链接。这里不需要会产生担心额外的流量,因为这点流量是我不足道的,而且你长期保持这样的设置也应该不是问题。 参考:http://docs.datastax.com/en/cassandra/2.1/cassandra/troubleshooting/trblshootIdleFirewall.html

2015年9月16日 · 1 分钟

Elasticsearch的Best Practice:把bootstrap.mlockall设为true

elasticsearch中java的最小内存和最大内存,官方建议设置为一样的,这样可以由于内存调整造成的长GC发生。 当然内存大小不要超过32G, 参考http://zhaoyanblog.com/archives/744.html 其次elasticsearch还有一个重要的参数bootstrap.mlockall,这个参数的目的是当你无法关闭系统的swap的时候,建议把这个参数设为true。防止在内存不够用的时候,elasticsearch的内存被交换至交换区,导致性能骤降。 参考http://zhaoyanblog.com/archives/744.html 建议即便你关闭了系统的swap,也把bootstrap.mlockall设为true bootstrap.mlockall的作用就是在程序启动的时候先去获取足够大的内存,再加入集群接收请求。没有bootstrap.mlockall的话,elasticsearch一启动就会发现集群接入集群,接收请求,然后JVM一点点的获取系统内存,直到指定值。 如果你有足够大的内存还好,如果没有足够大的内存,因为了elasticsearch引用文件会,系统内存会大量用于系统cache(linux的内存管理机制)。 从程序启动直到JVM获取到指定大小的内存,可能由于系统cache释放缓慢,而导致这个过程非常长,这有可能使你的节点GC非常频繁,从而导致集群不稳定。 所以强烈建议把bootstrap.mlockall设为true,这个值设为true,可能会让节点启动的时候比较慢,但是保证了节点加入集群后的稳定性。

2015年9月12日 · 1 分钟