parse-community / parse-server-push-adapter

A push notification adapter for Parse Server
https://parseplatform.org
MIT License
85 stars 100 forks source link

Push module: warning logs about Memory leak #93

Open uluru-phatnguyen opened 6 years ago

uluru-phatnguyen commented 6 years ago

Hi @flovilmart , I updated with newest version.

I got warning: Warning: Possible EventEmitter memory leak detected. 11 wakeup listeners added. Use emitter.setMaxListeners() to increase limit

Thanks.

uluru-phatnguyen commented 6 years ago

Related https://github.com/parse-community/parse-server/issues/4034

uluru-phatnguyen commented 6 years ago
node-pre-gyp ERR! parse-server-push-adapter APNS     at _connection._streamIds.forEach (/home/user_deploy/server-slave/source/node_modules/apn/lib/protocol/endpoint.js:155:16)
node-pre-gyp ERR! parse-server-push-adapter APNS     at Array.forEach (native)
node-pre-gyp ERR! parse-server-push-adapter APNS     at EventEmitter.close [as _close] (/home/user_deploy/server-slave/source/node_modules/apn/lib/protocol/endpoint.js:139:33)
node-pre-gyp ERR! parse-server-push-adapter APNS     at emitOne (events.js:101:20)
node-pre-gyp ERR! parse-server-push-adapter APNS     at TLSSocket.emit (events.js:188:7)
node-pre-gyp ERR! parse-server-push-adapter APNS     at _handle.close (net.js:497:12)
node-pre-gyp ERR! parse-server-push-adapter APNS     at TCP.done [as _onclose] (_tls_wrap.js:332:7)
node-pre-gyp ERR! parse-server-push-adapter APNS  APNS error transmitting to device %s with error %s 5fbdd21771431068be20c7346ef6f0afc408318769c9be6c25c27b9b67c2fee0 { VError: apn write failed: Not receiving Ping response after 150000 ms
node-pre-gyp ERR! parse-server-push-adapter APNS     at Stream.stream.on.err (/home/user_deploy/server-slave/source/node_modules/apn/lib/client.js:105:21)
node-pre-gyp ERR! parse-server-push-adapter APNS     at emitOne (events.js:96:13)
node-pre-gyp ERR! parse-server-push-adapter APNS     at Stream.emit (events.js:188:7)
node-pre-gyp ERR! parse-server-push-adapter APNS     at _connection._streamIds.forEach (/home/user_deploy/server-slave/source/node_modules/apn/lib/protocol/endpoint.js:155:16)
node-pre-gyp ERR! parse-server-push-adapter APNS     at Array.forEach (native)
node-pre-gyp ERR! parse-server-push-adapter APNS     at EventEmitter.close [as _close] (/home/user_deploy/server-slave/source/node_modules/apn/lib/protocol/endpoint.js:139:33)
node-pre-gyp ERR! parse-server-push-adapter APNS     at emitOne (events.js:101:20)

2017-08-08 12:05 +09:00:  parse-server-push-adapter APNS     at TLSSocket.emit (events.js:188:7)
node-pre-gyp ERR! parse-server-push-adapter APNS     at _handle.close (net.js:497:12)
node-pre-gyp ERR! parse-server-push-adapter APNS     at TCP.done [as _onclose] (_tls_wrap.js:332:7)
node-pre-gyp ERR! parse-server-push-adapter APNS   jse_shortmsg: 'apn write failed: Not receiving Ping response after 150000 ms',
node-pre-gyp ERR! parse-server-push-adapter APNS   jse_info: {},
node-pre-gyp ERR! parse-server-push-adapter APNS   message: 'apn write failed: Not receiving Ping response after 150000 ms',
node-pre-gyp ERR! parse-server-push-adapter APNS   stack: 'VError: apn write failed: Not receiving Ping response after 150000 ms\n    at Stream.stream.on.err (/home/user_deploy/server-slave/source/node_modules/apn/lib/client.js:105:21)\n    at emitOne (events.js:96:13)\n    at Stream.emit (events.js:188:7)\n    at _connection._streamIds.forEach (/home/user_deploy/server-slave/source/node_modules/apn/lib/protocol/endpoint.js:155:16)\n    at Array.forEach (native)\n    at EventEmitter.close [as _close] (/home/user_deploy/server-slave/source/node_modules/apn/lib/protocol/endpoint.js:139:33)\n    at emitOne (events.js:101:20)\n    at TLSSocket.emit (events.js:188:7)\n    at _handle.close (net.js:497:12)\n    at TCP.done [as _onclose] (_tls_wrap.js:332:7)' }
node-pre-gyp ERR! parse-server-push-adapter APNS VError: apn write failed: Not receiving Ping response after 150000 ms
uluru-phatnguyen commented 6 years ago

Duplicate #90

idefen1 commented 6 years ago

I am getting the same Warning: Possible EventEmitter memory leak detected. 11 wakeup listeners added. Use emitter.setMaxListeners() to increase limit warning and I only have about 2,000 installations. Anyone find a fix to this? I've tried reading most of the posts but have not had any luck quite understanding a solution =\

gateway commented 6 years ago

I'm starting to see this recently.. Any updates to this.. I'm running the latest parse server 2.7.4

funkenstrahlen commented 6 years ago

I did some testing on the latest parse server release 2.7.4 and also see this warning in the logs. I do not really know how to debug this.

flovilmart commented 6 years ago

This is probably an issue with the node apn module, and therefore the push adapter

funkenstrahlen commented 6 years ago

@flovilmart So you mean this should be reported to node-apn? Maybe this will be resolved with node apn 3.0 release. This might take some time though.

Until then I do not want to run 2.7.4 in production because of the memory leaks.

flovilmart commented 6 years ago

That’s quite unrelated, the emitter and leaks, but your call. 2.7.4 has been out for a while, and I’m not sure anything will be done in node apn for this issue as they are moving to a native http2 implementation. Also, you can use any version of the push adapter you like!

funkenstrahlen commented 6 years ago

So you suggest using the 2.7.4 parse Server version with an older version of the push adapter by explicitly setting this in my package.json?

flovilmart commented 6 years ago

Yep, and passing it into your ParseServer constructor, setting it in the package.json won’t automatically pick it up

refre5h commented 6 years ago

@funkenstrahlen are you able to get it working (with 2.7.4 and setting an older version of push adapter in package.json)? I'm unsure how to pass the apn adapter in the new ParseServer({...}) constructor.

flovilmart commented 6 years ago

@refre5h you can do it this way:


const pushOptions = {
   ios: {} // your iOS config 
}
const { ParsePushAdapter } = require('@parse/push-adapter');
const pushAdapter = new ParsePushAdapter(pushOptions);

new ParseServer({
   ... 
   push: {
      adapter: pushAdapter,
   }
});

Does it help?

refre5h commented 6 years ago

@flovilmart I got the server running with your sample, tyvm! But I'm still getting the Possible EventEmitter memory leak detected. error with the lowest available version on npm (2.0.2). From the release log on git (https://github.com/parse-community/parse-server-push-adapter/releases), it looks like 1.3.0 is the version before the adapter upgraded apn, but I was unable to install v1.3.0 as I got the error No matching version found for @parse/push-adapter@^1.3.0 when doing npm install. Any advice please?

flovilmart commented 6 years ago

@refre5h the package was renamed from parse-server-push-adapter so try this instead:

npm install --save parse-server-push-adapter@1.3.0
const { ParsePushAdapter } = require('parse-server-push-adapter');
const pushAdapter = new ParsePushAdapter(pushOptions); 
...
refre5h commented 6 years ago

@flovilmart That clear things up! I'm having the server running for a couple hours now, and I don't see any memory leak issue after sending numerous push. Thanks again!

flovilmart commented 6 years ago

@refre5h what version are you running now?

refre5h commented 6 years ago

"parse-server": "^2.7.4", "parse-server-push-adapter": "^1.3.0",

node -v // v6.12.2

...and I used your sample codes above in my index.js.

flovilmart commented 6 years ago

Ok and using the newest alpha versions of the adapter alongside node 8 with the latest release? Any feedback?

funkenstrahlen commented 6 years ago

I currently run

It does not leak memory and runs fine for me for about 2 weeks now (regarding push notifications). I have not enabled auto clearing of bad device tokens yet.

I chose to try the alpha release of the push adapter because 1.3.0 is too old.

flovilmart commented 6 years ago

Thanks for the feedback. The next release of parse server will be for node 8 minimum. It’s about time :)

jenlai1345 commented 5 years ago

I currently run

  • node 8.*
  • parse-server 2.7.4
  • @parse/push-adapter 3.0.0-alpha1

It does not leak memory and runs fine for me for about 2 weeks now (regarding push notifications). I have not enabled auto clearing of bad device tokens yet.

I chose to try the alpha release of the push adapter because 1.3.0 is too old.

Hi @funkenstrahlen ,

I was having memory leak issues and decided to use 3.0.0 push-adapter like you suggested. Just wondering if you had any more memory issue after you switched to the newer version of push-adapter?

Thank you!

p.s. for those who wanna switch to push-adapter 3.0.0, make sure you have node version > 8.11.1 otherwise your parse server will throw an error of "no http2 module found". I previously had node 6 so when I upgraded push-adapter, the server died.