逐個排查
1、linux服務器: ulimit -a 檢查 open files 設置(建議65535:ulimit -n 65535)
2、weblogic服務器:
在***\wlserver_10.3\common\bin\目錄下找到commEnv.sh,修改其resetFd()函數的ulimit -n 後面的數值,根據操作系統不同系統適量調大,調整後的該函數應為
resetFd() {
if [ ! -n "`uname -s |grep -i cygwin || uname -s |grep -i windows_nt || \
uname -s |grep -i HP-UX`" ]
then
maxfiles=`ulimit -H -n`
if [ "$?" = "0" -a `expr ${maxfiles} : '[0-9][0-9]*$'` -eq 0 ]; then
ulimit -n 65535fi
fi
3、代碼:
通過一個隊列來控制並發量,如果當前活躍(指調用發起但未執行回調)的異步調用量小於限定值,從隊列中取出執行。
如果活躍調用達到限定值,調用暫時存放在隊列中。
每個異步調用結束時,從隊列中取出新的異步調用執行。
bagpipe的API主要暴露了一個push()方法和一個full事件,示例代碼如下:
var Bagpipe = require('bagpipe');
// 設定最大並發數為10
var bagpipe = new Bagpipe(10);
for (var i=0; i<100; i++) {
bagpipe.push(async, function () {
// 異步回調執行
});
}
bagpipe.on('full', function (length) {
console.warn('隊列擁堵,目前隊列長度為:' + length);
});
4、如果還不行再檢查這裡/etc/security/limits.conf
加入:* - nofile 65535退出登陸
再ssh進來就效了
5、如果還有其他檢查頂,請友人補充,謝謝。