Process boshqaruvi
Jarayonlarni boshqarish nima?
Node.js-dagi jarayonlarni boshqarish ilovangizning lifecycle’ini (hayotiy siklini) nazorat qilishdan iborat.
Bunga quyidagilar kiradi:
- Ilovalarni ishga tushirish va to‘xtatish
- Buzilishlardan keyin qayta ishga tushirish
- Ishlash monitoringi
- Tizim signallari bilan ishlash
- Muhit o‘zgaruvchilarini boshqarish
Jarayon ma’lumotlariga kirish
process obyekti joriy Node.js jarayoni haqida ma’lumot beradi va uni nazorat qiladi.
Bu yerda ba’zi foydali xususiyatlar mavjud:
// Process identification
console.log('Process ID (PID):', process.pid);
// Platform information
console.log('Platform:', process.platform);
console.log('Node.js version:', process.version);
// Memory usage (in bytes)
console.log('Memory usage:', process.memoryUsage());
// Command line arguments
console.log('Arguments:', process.argv);
O‘zingiz sinab ko‘ring »
Jarayondan chiqish
Node.js dasturingiz quyidagi usullardan foydalanishni to‘xtatganda nazorat qilishingiz mumkin:
1. Oddiy chiqish
// Exit with success (status code 0)
process.exit();
// Or explicitly
process.exit(0);
2. Xato bilan chiqish
// Exit with error (status code 1)
process.exit(1);
3. Voqeadan chiqishdan oldin
// Run cleanup before exiting
process.on('beforeExit', (code) => {
console.log('About to exit with code:', code);
});
O‘zingiz sinab ko‘ring »
Jarayon hodisalarini boshqarish
Node.js jarayonlari tizim signallari va hodisalariga javob berishi mumkin.
Mana eng keng tarqalganlari:
1. Ctrl+C’ni qayta ishlash (SIGINT)
// Handle Ctrl+C
process.on('SIGINT', () => {
console.log('\nGot SIGINT. Press Control-D to exit.');
// Perform cleanup if needed
process.exit(0);
2. Jarayon tugatilishini qayta ishlash (SIGTERM)
process.on('SIGTERM', () => {
console.log('Received SIGTERM. Cleaning up...');
// Perform cleanup if needed
process.exit(0);
});
2. Jarayon tugatilishini qayta ishlash (SIGTERM)
process.on('SIGTERM', () => {
console.log('Received SIGTERM. Cleaning up...');
server.close(() => {
console.log('Server closed');
process.exit(0);
});
});
3. Qo‘lga olinmagan istisnolar
process.on('uncaughtException', (err) => {
console.error('Uncaught Exception:', err);
// Perform cleanup if needed
process.exit(1); // Exit with error
});
Jarayon menejerlari
Ishlab chiqarish muhitlari uchun dasturingiz muammosiz ishlashini ta’minlash uchun jarayon menejeridan foydalaning.
PM2 eng mashhur tanlovdir:
1. PM2 ni global o‘rnating
npm install -g pm2
2. PM2 ning asosiy buyruqlari
# Start an application
pm2 start app.js
# List all running applications
pm2 list
# Monitor resources
pm2 monit
# View application logs
pm2 logs
# Stop an application
pm2 stop app_name
# Restart an application
pm2 restart app_name
# Delete an application from PM2
pm2 delete app_name
3. PM2 konfiguratsiyasi
Kengaytirilgan konfiguratsiya uchun ekotizim faylini yarating:
// ecosystem.config.js
module.exports = {
apps: [{
name: 'my-app',
script: 'app.js',
instances: 'max',
autorestart: true,
watch: false,
max_memory_restart: '1G',
env: {
NODE_ENV: 'development',
},
env_production: {
NODE_ENV: 'production',
}
}]
};
PM2 yuklarni muvozanatlash, monitoring va jurnallarni boshqarish kabi ko‘plab boshqa xususiyatlarni taqdim etadi.
Muhit o‘zgaruvchilari
Muhit o‘zgaruvchilari - bu turli muhitlarda ilovangiz xatti-harakatlarini sozlaydigan kalit-qiymat juftliklari.
Muhit o‘zgaruvchilariga kirish
// Get a specific environment variable
const apiKey = process.env.API_KEY;
// Set a default value if not defined
const port = process.env.PORT || 3000;
// Check if running in production
const isProduction = process.env.NODE_ENV === 'production';
// List all environment variables
console.log('Environment variables:', process.env);
.env faylidan muhit o‘zgaruvchilari yuklanmoqda
# Install dotenv package
npm install dotenv
// Load environment variables from .env file
require('dotenv').config();
// Now you can access variables from .env
console.log('Database URL:', process.env.DATABASE_URL);
Muhit o‘zgaruvchilari uchun eng yaxshi amaliyotlar:
- Hech qachon maxfiy ma’lumotlarni versiya boshqaruviga topshirmang
- Mahalliy rivojlanish uchun
.envdan foydalaning - Xosting platformangiz orqali ishlab chiqarishda muhit o‘zgaruvchilarini o‘rnating
- README-da barcha kerakli muhit o‘zgaruvchilarini hujjatlang
Bolalar jarayonlari
Node.js child_process moduli yordamida tizim buyruqlari va boshqa skriptlarni ishga tushirishi mumkin.
1. Oddiy buyruqni bajaring
const { exec } = require('child_process');
exec('ls -la', (error, stdout, stderr) => {
if (error) {
console.error(`Error: ${error.message}`);
return;
}
if (stderr) {
console.error(`stderr: ${stderr}`);
return;
}
console.log(`Output: ${stdout}`);
});
2. Katta chiqish uchun spawndan foydalanish
const { spawn } = require('child_process');
// Better for large data output
const child = spawn('find', ['/', '-type', 'f']);
child.stdout.on('data', (data) => {
console.log(`Found file: ${data}`);
});
child.stderr.on('data', (data) => {
console.error(`Error: ${data}`);
});
child.on('close', (code) => {
console.log(`Child process exited with code ${code}`);
});
Jarayon monitoringi va unumdorligi
1. Xotiradan foydalanish
// Get memory usage in MB
function getMemoryUsage() {
const used = process.memoryUsage();
return {
rss: `${Math.round(used.rss / 1024 / 1024 * 100) / 100} MB`,
heapTotal: `${Math.round(used.heapTotal / 1024 / 1024 * 100) / 100} MB`,
heapUsed: `${Math.round(used.heapUsed / 1024 / 1024 * 100) / 100} MB`,
external: `${Math.round(used.external / 1024 / 1024 * 100) / 100} MB`
};
}
// Monitor memory usage every 5 seconds
setInterval(() => {
console.log('Memory usage:', getMemoryUsage());
}, 5000);
2. CPU foydalanish
const startUsage = process.cpuUsage();
// Do some CPU-intensive work
for (let i = 0; i < 1000000000; i++) {}
const endUsage = process.cpuUsage(startUsage);
console.log('CPU usage (user):', endUsage.user / 1000, 'ms');
console.log('CPU usage (system):', endUsage.system / 1000, 'ms');
Asosiy xulosalar
- Jarayon obyekti: tizim va jarayon ma’lumotlariga kirish
- Jarayonlarni boshqarish: ilovani ishga tushirish, to‘xtatish va uning lifecycle’ini (hayotiy siklini) boshqarish
- Muhit o‘zgaruvchilari: Turli muhitlarda ilova harakatini sozlang
- Bola jarayonlar: Tizim buyruqlari va boshqa skriptlarni ishga tushirish
- Xatolarni hal qilish: Tugallanmagan istisnolar va rad etishlarni boshqaring
- Signallar: SIGINT va SIGTERM kabi tizim signallariga javob bering
- PM2: ishlab chiqarish jarayonini boshqarish uchun zarur
- Umumiylikni monitoring qilish: Xotira va protsessordan foydalanishni kuzatish
Ishonchli va barqaror Node.js ilovalarini yaratish uchun jarayonni samarali boshqarish, ayniqsa ishlab chiqarish muhitida juda muhimdir.
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
