Why do I keep having to reboot my AWS ec2 instance - node.js

I have a nodejs app that I'm running on a ubuntu server on an ec2 instance. The code for the app is just this...
app.listen(port, () => {
HorseRacingAPI()
FootballAPI()
AmericanFootballAPI()
setInterval(() => {
HorseRacingAPI()
}, 1000 * 120)
setInterval(() => {
FootballAPI()
}, 1000 * 120)
setInterval(() => {
AmericanFootballAPI()
}, 1000 * 120)
})
Each of the 3 functions makes a request to an API, reorganises the returned data, and then sends the data to mongodb.
When I run this on my computer, it works great, sometimes a function may fail like 1% of the time, but it runs again 2 minutes later and works. However, when I run this on the ec2 instance, after a couple hours, the ec2 instance fails and won't run the nodejs app again until I reboot the instance and restart the pm2 server.
The pm2 logs look like this...
0|server | at Timeout.<anonymous> (/home/ubuntu/TPL-SCRAPI/node_modules/mongoose/lib/drivers/node-mongodb-native/collection.js:197:23)
0|server | at listOnTimeout (internal/timers.js:557:17)
0|server | at processTimers (internal/timers.js:500:7)
0|server | MongooseError: Operation `oddsmatchers.updateMany()` buffering timed out after 10000ms
0|server | at Timeout.<anonymous> (/home/ubuntu/TPL-SCRAPI/node_modules/mongoose/lib/drivers/node-mongodb-native/collection.js:197:23)
0|server | at listOnTimeout (internal/timers.js:557:17)
0|server | at processTimers (internal/timers.js:500:7)
0|server | MongooseError: Operation `oddsmatchers.updateMany()` buffering timed out after 10000ms
0|server | at Timeout.<anonymous> (/home/ubuntu/TPL-SCRAPI/node_modules/mongoose/lib/drivers/node-mongodb-native/collection.js:197:23)
0|server | at listOnTimeout (internal/timers.js:557:17)
0|server | at processTimers (internal/timers.js:500:7)
0|server | MongooseError: Operation `oddsmatchers.updateMany()` buffering timed out after 10000ms
0|server | at Timeout.<anonymous> (/home/ubuntu/TPL-SCRAPI/node_modules/mongoose/lib/drivers/node-mongodb-native/collection.js:197:23)
0|server | at listOnTimeout (internal/timers.js:557:17)
0|server | at processTimers (internal/timers.js:500:7)
Is there anything I'm doing wrong? I need this code to run forever basically, so what do I need to do to make this happen with essentially 100% reliability?

Related

Not able to connect my service with Redis

My server is located on client premise.
I'm facing an issue, in that my service(node js) is not able to connect with redis.
If I'm checking the status of redis it's running fine.
Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2023-02-15 14:16:34 EAT; 18h ago
Docs: http://redis.io/documentation,
man:redis-server(1)
Main PID: 3085148 (redis-server)
Status: "Ready to accept connections"
Tasks: 5 (limit: 19104)
Memory: 8.2M
CGroup: /system.slice/redis-server.service
I'm able to connect with the service manually from one server providing host and port.
But the issue is when my service is trying to connect so it's failing.
So can anyone help me in suggesting what could be a possible reason for the same?
Error:
[ioredis] Unhandled error event: Error: connect ETIMEDOUT
16|pdsl_pa | at Socket.<anonymous> (/var/www/stage_env/pdsl_parking_service/node_modules/ioredis/built/redis/index.js:318:37)
16|pdsl_pa | at Object.onceWrapper (node:events:645:28)
16|pdsl_pa | at Socket.emit (node:events:526:28)
16|pdsl_pa | at Socket.emit (node:domain:475:12)
16|pdsl_pa | at Socket._onTimeout (node:net:501:8)
16|pdsl_pa | at listOnTimeout (node:internal/timers:559:17)
16|pdsl_pa | at processTimers (node:internal/timers:502:7)
16|pdsl_pa | [ioredis] Unhandled error event: Error: connect EHOSTUNREACH 172.**.***.***:6379
16|pdsl_pa | at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1157:16)
16|pdsl_pa | [ioredis] Unhandled error event: Error: connect EHOSTUNREACH 172.**.***.***:6379
16|pdsl_pa | at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1157:16)
16|pdsl_pa | [ioredis] Unhandled error event: Error: connect EHOSTUNREACH 172.**.***.***:6379

why a socket server container can't reach my redis server container even if [duplicate]

This question already has answers here:
Error: Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED 127.0.0.1:6379
(7 answers)
Closed 9 months ago.
i have this docker compose that connects my redis server with my socket server that has redis client
version: "3.8"
services:
redis-server:
image: "redis"
volumes:
- express-chat-vol:/express-chat/
networks:
- express-chat-net
ports:
- 6379:6379
socket-server:
build:
context: ./server/
dockerfile: Dockerfile.socketServer
ports:
- 5000:5000
networks:
- express-chat-net
volumes:
express-chat-vol:
networks:
express-chat-net:
but socket server can't access the redis server and bring up this error and i'm stuck for 2 days now , how can i solve it ?
Starting token2_socket-server_1 ... done
Starting token2_redis-server_1 ... done
Attaching to token2_socket-server_1, token2_redis-server_1
redis-server_1 | 1:C 29 May 2022 01:07:22.191 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
redis-server_1 | 1:C 29 May 2022 01:07:22.191 # Redis version=7.0.0, bits=64, commit=00000000, modified=0, pid=1, just started
redis-server_1 | 1:C 29 May 2022 01:07:22.191 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
//some logs
redis-server_1 | 1:M 29 May 2022 01:07:22.195 * Ready to accept connections
socket-server_1 | socket server is listening on port 5000
socket-server_1 | node:internal/process/promises:288
socket-server_1 | triggerUncaughtException(err, true /* fromPromise */);
socket-server_1 | ^
socket-server_1 |
socket-server_1 | Error: connect ECONNREFUSED 127.0.0.1:6379
socket-server_1 | at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1195:16)
socket-server_1 | Emitted 'error' event on Commander instance at:
socket-server_1 | at RedisSocket.<anonymous> (/socketServer/node_modules/#redis/client/dist/lib/client/index.js:339:14)
socket-server_1 | at RedisSocket.emit (node:events:527:28)
socket-server_1 | at RedisSocket._RedisSocket_connect (/socketServer/node_modules/#redis/client/dist/lib/client/socket.js:127:14)
socket-server_1 | at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
socket-server_1 | at async Commander.connect (/socketServer/node_modules/#redis/client/dist/lib/client/index.js:163:9)
socket-server_1 | at async connectRedisClient (/socketServer/socketServer.js:19:3) {
socket-server_1 | errno: -111,
socket-server_1 | code: 'ECONNREFUSED',
socket-server_1 | syscall: 'connect',
socket-server_1 | address: '127.0.0.1',
socket-server_1 | port: 6379
socket-server_1 | }
socket-server_1 |
socket-server_1 | Node.js v18.0.0
token2_socket-server_1 exited with code 1```
Try using redis-server as the hostname and not 127.0.0.1.

Intermittent redis connection error: 'UNCERTAIN STATE'

Time and time again, we get this error:
{ Error: Redis connection to some-redis-server:6379 failed - read ETIMEDOUT
at TCP.onStreamRead (internal/stream_base_commons.js:171:27) errno: 'ETIMEDOUT', code: 'ETIMEDOUT', syscall: 'read' }
{ AbortError: Redis connection lost and command aborted. It might have been processed.
at RedisClient.flush_and_error (/usr/src/app/node_modules/redis/index.js:362:23)
at RedisClient.connection_gone (/usr/src/app/node_modules/redis/index.js:664:14)
at Socket.<anonymous> (/usr/src/app/node_modules/redis/index.js:289:14)
at Object.onceWrapper (events.js:281:20)
at Socket.emit (events.js:193:13)
at TCP._handle.close (net.js:614:12)
code: 'UNCERTAIN_STATE',
command: 'GET'
args: [ 'some-key' ] }
We are using https://www.npmjs.com/package/redis to access redis.
Some details of the setup:
Currently 25GB of data stored in Redis
Writes = a rate of approximately 2MB/sec.
Max number of concurrent clients connected: 400
I don't know where to really start looking, so any help would be appreciated.

Kue connect Redis at AWS EC2 fail, show `Caught exception: AbortError`

I use docker to run redis on AWS EC2 and I use kue to connect to it at my node server.
But it shows error like below.
How could I fix this? I use redis-cli to ping to IP and GUI tool to connect redis are woring fine.
Caught exception: AbortError
11:05:00 0|server | at RedisClient.flush_and_error (/Users/Project/node_modules/kue/node_modules/redis/index.js:357:23)
11:05:00 0|server | at RedisClient.connection_gone (/Users/Project/node_modules/kue/node_modules/redis/index.js:659:14)
11:05:00 0|server | at Socket.<anonymous> (/Users/Project/node_modules/kue/node_modules/redis/index.js:293:14)
11:05:00 0|server | at Object.onceWrapper (events.js:293:19)
11:05:00 0|server | at emitNone (events.js:91:20)
11:05:00 0|server | at Socket.emit (events.js:188:7)
11:05:00 0|server | at endReadableNT (_stream_readable.js:974:12)
11:05:00 0|server | at _combinedTickCallback (internal/process/next_tick.js:80:11)
11:05:00 0|server | at process._tickDomainCallback (internal/process/next_tick.js:128:9)
11:05:00 0|server | code: 'UNCERTAIN_STATE',
11:05:00 0|server | command: 'BLPOP',
11:05:00 0|server | args: [ 'q:processSendEMail:jobs', 0 ] }

ERROR in multi main Cannot GET /dist/bundle.js

i am new to react.js. i am getting this error on production but same code is working on development. can anybody help me.when i am running this code on development.everytime webpack built and generate a dist folder this folder have a bundle.js but webpack is not build on production
/home/ubuntu/.pm2/logs/server-out-0.log last 10 lines:
0|server | Version: webpack 1.13.2
0|server | Time: 566ms
0|server | Asset Size Chunks Chunk Names
0|server | bundle.js 1.52 kB 0 [emitted] main
0|server | chunk {0} bundle.js (main) 28 bytes [rendered]
0|server | [0] multi main 28 bytes {0} [built] [1 error]
0|server |
0|server | ERROR in multi main
0|server | Module not found:
Error:Cannot resolve 'file' or 'directory'
./client/index.html in /var/www/html/AR/server
0|server | # multi main
[STREAMING] Now streaming realtime logs for [all] processes
0|server | Error: Cannot GET /dist/bundle.js
0|server | at raiseUrlNotFoundError
(/var/www/html/AR/node_modules/loopback/server/middleware/url-not-
found.js:20:17)
0|server | at Layer.handle [as handle_request]
(/var/www/html/AR/node_modules/express/lib/router/layer.js:95:5)
0|server | at trim_prefix
(/var/www/html/AR/node_modules/express/lib/router/index.js:312:13)
0|server | at
/var/www/html/AR/node_modules/express/lib/router/index.js:280:7
0|server | at Function.process_params
(/var/www/html/AR/node_modules/express/lib/router/index.js:330:12)
0|server | at next
(/var/www/html/AR/node_modules/express/lib/router/index.js:271:10)
0|server | at SendStream.error
(/var/www/html/AR/node_modules/express/node_modules/serve-
static/index.js:121:7)
0|server | at emitOne (events.js:96:13)
0|server | at SendStream.emit (events.js:188:7)
0|server | at SendStream.error
(/var/www/html/AR/node_modules/express/node_modules/send/index.js:275:17)
Thanks,

Resources