修改ElasticBeanstalk中Passenger的max-pool-size
背景
在AWS Elastic Beanstalk中,如果选用Ruby with Passenger运行Rails时,会遇到一个问题,就是EB环境中的Passenger的max_pool_size是默认的6。如果EB中的Instance选用的是性能比较高的类型,只起6个Passenger进程会是一个巨大的浪费。下面介绍几个修改EB中Passenger max_pool_size参数的方法。
Passenger官方说明
最新的官方Introduction to configuring Passenger Standalone文档中,Passenger Standalone可以通过如下几种方式来修改启动参数
- 一、传递参数给启动命令
passenger start
- 二、使用环境变量(从5.0.22开始)
- 三、通过配置文件
Passengerfile.json
EB的限制
EB中的Passenger, 版本还是使用的4.0.60
, 因此官网所述的三个方法中,在EB中并不完全适用。
- 方法二需要在
5.0.22
以上版本才支持,因此在EB环境中不可用 - 方法三中所述的
Passengerfile.json
是在5.0.1中才被正式使用的,在之前的版本中,使用的是passenger-standalone.json
。所以在EB环境中,需要使用passenger-standalone.json
来修改启动参数。文件命令的变化可参见Passenger 5.0.1的Release Note
实现
通过passenger-standalone.json来实现
在项目代码主目录下,添加文件passenger-standalone.json
, 文件内容为
|
|
eb deploy
完成后,使用EC2的key pair登陆EC2, sudo后运行passenger-status
。可以看到max_pool_size已成功修改为10。
通过EB中的passenger命令参数来实现
EB环境中的EC2的passenger启动脚本是/etc/init.d/passenger
,实际运行的是/opt/elasticbeanstalk/support/conf/passenger
。
只要通过ebextension配置文件,修改/opt/elasticbeanstalk/support/conf/passenger
,添加上对max_pool_size
的支持即可。
原始的passenger
文件参见origin_passenger
用来修改passenger
,支持读取环境变量中的PASSENGER_MAX_POOL_SIZE
的extension config如下:
|
|
对原passenger
脚本进行了两处修改
- 添加了
SELFOPTS
- 添加
SELFOPTS
到passenger start
命令之后。
|
|
该修改参考了如下的两篇帖子:
- Elastic Beanstalk Rails - Modify passenger config passenger_max_pool_size
- change passenger standalone configuration (max_pool_size) for rails app
但这两篇帖子中,都把--max-pool-size
放在了GENERALOPTS
变量中,但这么设置是存在问题的。
因为脚本里的stop和status也会用到GENERALOPTS
这个变量,但passenger stop
和passenger status
并不支持--max-pool-size
这个参数,如果放在GENERALOPTS
中,会导致passenger stop
和passenger status
运行失败。
|
|
所以最终解决方案是额外添加了变量SELFOPTS
用来存放参数--max-pool-size
, 并且只将SELFOPTS
添加到passenger start
中。
使用eb deploy
发布ebextension到EB中,在EB Console中添加环境变量PASSENGER_MAX_POOL_SIZE
并设定所想要的值。
登陆Instance后,即可看到Max pool size
已经被设置为PASSENGER_MAX_POOL_SIZE
相同的值了。
相关修改的snippet
原始passenger文件以及ebextension配置文件可参照 https://github.com/jibing57/my-snippet/tree/master/AWS/ElasticBeanstalk/01_increase_passenger_max_pool_size
后记
要修改其他的Passenger启动参数,也可以使用类似的方法来实现。Passenger所支持的参数在官网中都有相关说明,Configuration reference for Passenger Standalone。 唯一要注意的是,EB中的Passenger版本是4.0.60的,版本要求大于4.0.60的选项在EB中是无效的。