Был с сыном в ростовском зоопарке, там появился новый вольер, где можно смотреть на козлов сверху.
Такой же подход в московском зоопарке. Очень удобно посетителям.
Животные как на ладони.
Животные как на ладони.
import cluster from 'node:cluster';
import http from 'node:http';
import { availableParallelism } from 'node:os';
import process from 'node:process';
const numCPUs = availableParallelism();
if (cluster.isPrimary) {
console.log(`Primary ${process.pid} is running`);
// Fork workers.
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', (worker, code, signal) => {
console.log(`worker ${worker.process.pid} died`);
});
} else {
// Workers can share any TCP connection
// In this case it is an HTTP server
http.createServer((req, res) => {
res.writeHead(200);
res.end('hello world\n');
}).listen(8000);
console.log(`Worker ${process.pid} started`);
}
go install github.com/codesenberg/bombardier@latest
bombardier http://127.0.0.1:7100/api/some/1101Результат без cluster:
Bombarding http://127.0.0.1:7100/api/some/1101 for 10s using 125 connection(s)
[=================================================================================================================] 10s
Done!
Statistics Avg Stdev Max
Reqs/sec 2754.89 1413.90 5813.88
Latency 45.31ms 1.95ms 72.43ms
HTTP codes:
1xx - 0, 2xx - 27625, 3xx - 0, 4xx - 0, 5xx - 0
others - 0
Throughput: 9.99MB/s
Результат с cluster (все 24 потока):Bombarding http://127.0.0.1:7100/api/some/1101 for 10s using 125 connection(s)
[=================================================================================================================] 10s
Done!
Statistics Avg Stdev Max
Reqs/sec 8424.89 801.49 15177.67
Latency 14.84ms 1.69ms 72.64ms
HTTP codes:
1xx - 0, 2xx - 84224, 3xx - 0, 4xx - 0, 5xx - 0
others - 0
Throughput: 30.54MB/s
Разница по производительности почти в 3 раза.let str1 = 'Famabara';
let str2 = str1; // Тут копия или новая строка?
let obj1 = { name: 'Famabara' };
let obj2 = obj1; // Тут копия или новый объект?
const arr = [];
for (let i = 0; i < 1200200; i++) {
arr.push('0123456789'.repeat(1000 * 1000));
}
while (true) {
}
39858 dima 20 0 2026180 1,0g 37824 R 100,0 3,2 0:21.44 nodeНа моей Кубунте сожрано 1 Гб оперативки. Ух ты.
const arr = [];
const text = '0123456789'.repeat(1000 * 1000);
for (let i = 0; i < 1200200; i++) {
arr.push(text);
}
while (true) {
}
40267 dima 20 0 1066148 73796 37440 R 99,7 0,2 0:12.27 node
topи вверху поверх всякой мелочи вижу это:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2251 postgres 20 0 2445140 2,3g 4 S 400,7 14,7 6:20.66 kswapd0Жрёт все ресурсы, процессор загружен полностью.
kill 2251 rebootЗахожу по SSH снова - чисто. Ну, думаю, всё ок.
ls -l /proc/2251/exeвыводит:
lrwxrwxrwx 1 postgres postgres 0 июл 23 13:12 /proc/2251/exe -> /var/lib/postgresql/.configrc5/a/kswapd0Такс... Находится в каталоге postgresql. А вдруг это важная часть сервера базы данных? Названо ведь так "по-умному" - configrc5.
kill 2251 cd /var/lib/postgresql mv .configrc5 _renamed_.configrc5 rebootПосле этого всё хорошо... но только пару недель :)
journalctl -t sshdОпытные линуксоиды знают, что так смотреть не имеет смысла. Там толпы кул-хацкеров пытаются подключиться к серверу, но обламываются.
journalctl -t sshd --since "2024-08-01" --until "2024-08-16 10:00:00" | grep "Accepted "И там среди моих заходов вижу эту падлюку:
Jul 06 11:40:07 debian sshd[589266]: Accepted password for postgres from 103.94.113.2 port 33482 ssh2 Jul 10 08:18:00 debian sshd[723300]: Accepted publickey for postgres from 162.217.64.26 port 60366 ssh2: RSA SHA256:MkYY9qiVsFGBC5WkjoClCkwEFW5iSjcGQF7m4n4H7Cw Aug 02 07:45:44 debian sshd[258599]: Accepted publickey for postgres from 206.189.36.236 port 47140 ssh2: RSA SHA256:MkYY9qiVsFGBC5WkjoClCkwEFW5iSjcGQF7m4n4H7Cw Aug 02 07:50:53 debian sshd[258915]: Accepted publickey for postgres from 157.245.42.37 port 50478 ssh2: RSA SHA256:MkYY9qiVsFGBC5WkjoClCkwEFW5iSjcGQF7m4n4H7Cw Aug 14 10:23:08 debian sshd[99132]: Accepted publickey for postgres from 82.165.79.77 port 40086 ssh2: RSA SHA256:MkYY9qiVsFGBC5WkjoClCkwEFW5iSjcGQF7m4n4H7Cw Aug 14 10:47:37 debian sshd[99723]: Accepted publickey for postgres from 103.146.52.138 port 55110 ssh2: RSA SHA256:MkYY9qiVsFGBC5WkjoClCkwEFW5iSjcGQF7m4n4H7CwЁлы-палы! Сначала чувак вошёл по паролю, а потом уже входил по ключу.
passwd postgresи ставлю запрет входа SSH для определённых юзеров:
nano /etc/ssh/sshd_config
DenyUsers postgres no-reply blahВ идеале, конечно вообще всем запретить, а оставить только для разрешённых.
systemctl restart sshd
/var/lib/postgresql/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEArDp4cun2lhr4KUhBGE7VvAcwdli2a8dbnrTOrbMz1+5O73fcBOx8NVbUT0bUanUV9tJ2/9p7+vD0EpZ3Tz/+0kX34uAx1RV/75GVOmNx+9EuWOnvNoaJe0QXxziIg9eLBHpgLMuakb5+BgTFB+rKJAw9u9FSTDengvS8hX1kNFS4Mjux0hJOK8rvcEmPecjdySYMb66nylAKGwCEE6WEQHmd1mUPgHwGQ0hWCwsQk13yCGPK5w6hYp5zYkFnvlC8hGmd4Ww+u97k6pfTGTUbJk14ujvcD9iUKQTTWYYjIIu5PmUux5bsZ0R4WFwdIe6+i6rBLAsPKgAySVKPRK+oRw== mdrfckrРазумеется это надо сразу удалять.