简单说就是阿里云的芒果服务限制连接数1000。php服务器的进程数超了这个数字。导致连接数占满。导致报错
启用replicaSet仅启到主备作用。无法分担连接数。(主从库连接数相同)
php mongodb扩展不支持URI中的maxPoolSize php-fpm1子进程产生1 mongo TCP连接 进程存在时不释放。超过时会造成连接数占满
mongo服务不建议使用短链接
因此减少分配给该项目的php-fpm进程数。以此稳定mongo的连接数
另外不是很清楚yii\mongodb\Connection中关闭连接的方法是否能真正关闭连接,看上去只是reset了几个属性。 line:378
/**
* Closes the currently active DB connection.
* It does nothing if the connection is already closed.
*/
public function close()
{
if ($this->manager !== null) {
Yii::trace('Closing MongoDB connection: ' . $this->dsn, __METHOD__);
$this->manager = null;
foreach ($this->_databases as $database) {
$database->clearCollections();
}
$this->_databases = [];
}
}
@Terry #1楼 了解过了 阿里云的mongodb副本集自带replicaSet,应该使用如下URI连接:
mongo://user:password@host1:port1,host2:port2/database?replicaSet=xxx&maxPoolSize=1
这里maxPoolSize指的是一个客户端的连接池大小。这里我以一个请求占用一个php-fpm的worker计算,maxPoolSize就设置为1了。
关于replicaSet可以参考这篇文章:http://www.cnblogs.com/yaoxing/p/mongodb-replica-set.html
@Terry #2楼 另外custom_options的配置也建议增加input输入框的配置 目前只有select的。 地址: vendor/fancyecommerce/fecshop/app/appadmin/modules/Catalog/block/productinfo/Manageredit.php
if ($type == 'select' && is_array($data) && !empty($data)) {
$str .= '<select atr="'.$attr.'" class="custom_option_attr">';
foreach ($info['display']['data'] as $k=>$v) {
$str .= '<option value="'.$k.'">'.$v.'</option>';
}
$str .= '</select>';
}else if($type == 'inputString'){
$str .= '<input type="text" style="width:40px;" atr="'.$attr.'" class="custom_option_attr">';
}
$str .= '</div>';
namespace appserver\local\local_modules\mysqldb\customer;
use yii\behaviors\TimestampBehavior;
class Address extends \fecshop\models\mysqldb\customer\Address{
public function behaviors()
{
return [
[
'class'=>TimestampBehavior::className(),
'createdAtAttribute' => 'created_at',
'updatedAtAttribute' => 'updated_at',
'value' => time()
]
];
}
}
好的 附上代码