naimulislam864 commited on
Commit
38d35b2
·
verified ·
1 Parent(s): 27201da

Update start.sh

Browse files
Files changed (1) hide show
  1. start.sh +103 -26
start.sh CHANGED
@@ -1,41 +1,118 @@
1
  #!/bin/bash
2
 
3
  echo "============================================"
4
- echo " Starting Web Terminal with Resource Limits"
5
  echo "============================================"
6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
  export NODE_OPTIONS="--max-old-space-size=4096"
8
- ulimit -u 500 2>/dev/null || true
 
 
 
 
9
 
10
  # Try cgroup limits
11
- echo "15461882265" > /sys/fs/cgroup/memory.max 2>/dev/null || true
12
- echo "180000 100000" > /sys/fs/cgroup/cpu.max 2>/dev/null || true
13
- echo "15461882265" > /sys/fs/cgroup/memory/memory.limit_in_bytes 2>/dev/null || true
14
- echo 180000 > /sys/fs/cgroup/cpu/cpu.cfs_quota_us 2>/dev/null || true
15
- echo 100000 > /sys/fs/cgroup/cpu/cpu.cfs_period_us 2>/dev/null || true
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
 
17
- # Background resource monitor
18
  (
19
- while true; do
20
- sleep 10
21
- TOTAL_MEM=$(awk '/MemTotal/{print $2}' /proc/meminfo)
22
- AVAIL_MEM=$(awk '/MemAvailable/{print $2}' /proc/meminfo)
23
- USED_MEM=$((TOTAL_MEM - AVAIL_MEM))
24
- MAX_MEM=$((TOTAL_MEM * 90 / 100))
25
- if [ "$USED_MEM" -gt "$MAX_MEM" ] 2>/dev/null; then
26
- echo "[Monitor] Memory high: ${USED_MEM}KB / ${TOTAL_MEM}KB"
27
- ps aux --sort=-%mem | awk 'NR>1{print $2, $4, $11}' | while read PID MEM CMD; do
28
- case "$CMD" in *node*|*bash*|*start*) continue ;; esac
29
- MEM_INT=${MEM%.*}
30
- if [ "${MEM_INT:-0}" -gt 15 ]; then
31
- kill -15 "$PID" 2>/dev/null
32
- sleep 2
33
- kill -9 "$PID" 2>/dev/null
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
  fi
35
  done
36
- fi
37
- done
38
  ) &
39
 
40
- echo "Starting server on port ${PORT:-7860}..."
 
 
 
 
 
 
 
41
  exec node /app/server.js
 
1
  #!/bin/bash
2
 
3
  echo "============================================"
4
+ echo " Web Terminal - Resource Limited Mode"
5
  echo "============================================"
6
 
7
+ # Limits: 95% of resources
8
+ MAX_MEM_PERCENT=95
9
+ MAX_CPU_PERCENT=95
10
+
11
+ # Calculate limits
12
+ # HuggingFace provides 16GB RAM, 2 vCPU
13
+ TOTAL_MEM_KB=$(awk '/MemTotal/{print $2}' /proc/meminfo)
14
+ MAX_MEM_KB=$((TOTAL_MEM_KB * MAX_MEM_PERCENT / 100))
15
+ MAX_MEM_BYTES=$((MAX_MEM_KB * 1024))
16
+
17
+ echo "Memory Limit: ${MAX_MEM_KB}KB (${MAX_MEM_PERCENT}% of ${TOTAL_MEM_KB}KB)"
18
+ echo "CPU Limit: ${MAX_CPU_PERCENT}% of 2 vCPUs"
19
+
20
+ # Node.js memory limit (give it 4GB max for the server itself)
21
  export NODE_OPTIONS="--max-old-space-size=4096"
22
+
23
+ # Set shell resource limits
24
+ ulimit -v $((MAX_MEM_KB)) 2>/dev/null || true # Virtual memory
25
+ ulimit -m $((MAX_MEM_KB)) 2>/dev/null || true # Resident memory
26
+ ulimit -u 256 2>/dev/null || true # Max processes
27
 
28
  # Try cgroup limits
29
+ setup_cgroups() {
30
+ # cgroups v2
31
+ if [ -f "/sys/fs/cgroup/cgroup.controllers" ]; then
32
+ echo "Setting cgroups v2 limits..."
33
+ echo "$MAX_MEM_BYTES" > /sys/fs/cgroup/memory.max 2>/dev/null || true
34
+ echo "$((MAX_MEM_BYTES * 110 / 100))" > /sys/fs/cgroup/memory.high 2>/dev/null || true
35
+ # CPU: 190000 per 100000 = 1.9 CPUs (95% of 2)
36
+ echo "190000 100000" > /sys/fs/cgroup/cpu.max 2>/dev/null || true
37
+ fi
38
+
39
+ # cgroups v1
40
+ if [ -d "/sys/fs/cgroup/memory" ]; then
41
+ echo "Setting cgroups v1 memory limit..."
42
+ echo "$MAX_MEM_BYTES" > /sys/fs/cgroup/memory/memory.limit_in_bytes 2>/dev/null || true
43
+ echo "$((MAX_MEM_BYTES * 110 / 100))" > /sys/fs/cgroup/memory/memory.soft_limit_in_bytes 2>/dev/null || true
44
+ fi
45
+
46
+ if [ -d "/sys/fs/cgroup/cpu" ]; then
47
+ echo "Setting cgroups v1 CPU limit..."
48
+ echo 190000 > /sys/fs/cgroup/cpu/cpu.cfs_quota_us 2>/dev/null || true
49
+ echo 100000 > /sys/fs/cgroup/cpu/cpu.cfs_period_us 2>/dev/null || true
50
+ fi
51
+ }
52
+
53
+ setup_cgroups
54
 
55
+ # Background resource enforcer
56
  (
57
+ echo "[Monitor] Started resource enforcer"
58
+
59
+ while true; do
60
+ sleep 3
61
+
62
+ # Get current memory usage
63
+ MEM_USED_KB=$(awk '/MemTotal/{t=$2} /MemAvailable/{a=$2} END{print t-a}' /proc/meminfo)
64
+ MEM_PERCENT=$((MEM_USED_KB * 100 / TOTAL_MEM_KB))
65
+
66
+ # If memory > 90%, start killing heavy processes
67
+ if [ "$MEM_PERCENT" -gt 90 ]; then
68
+ echo "[Monitor] Memory at ${MEM_PERCENT}% - enforcing limits"
69
+
70
+ # Get processes sorted by memory, skip essential ones
71
+ ps aux --sort=-%mem 2>/dev/null | awk 'NR>1 {print $2, $4, $11}' | while read PID MEM CMD; do
72
+ # Skip node server and bash
73
+ case "$CMD" in
74
+ *node*server*|*bash*|*ps*|*awk*|*monitor*) continue ;;
75
+ esac
76
+
77
+ MEM_INT=${MEM%.*}
78
+ MEM_INT=${MEM_INT:-0}
79
+
80
+ # Kill processes using > 10% memory
81
+ if [ "$MEM_INT" -gt 10 ]; then
82
+ echo "[Monitor] Killing PID $PID ($CMD) using ${MEM}% memory"
83
+ kill -9 "$PID" 2>/dev/null
84
+ break
85
+ fi
86
+ done
87
+ fi
88
+
89
+ # CPU throttling - use SIGSTOP/SIGCONT for heavy processes
90
+ ps aux --sort=-%cpu 2>/dev/null | awk 'NR>1 {print $2, $3, $11}' | head -5 | while read PID CPU CMD; do
91
+ case "$CMD" in
92
+ *node*server*|*bash*|*ps*|*awk*|*monitor*) continue ;;
93
+ esac
94
+
95
+ CPU_INT=${CPU%.*}
96
+ CPU_INT=${CPU_INT:-0}
97
+
98
+ # Throttle processes using > 150% CPU (1.5 cores)
99
+ if [ "$CPU_INT" -gt 150 ]; then
100
+ echo "[Monitor] Throttling PID $PID ($CMD) using ${CPU}% CPU"
101
+ kill -STOP "$PID" 2>/dev/null
102
+ sleep 0.3
103
+ kill -CONT "$PID" 2>/dev/null
104
  fi
105
  done
106
+
107
+ done
108
  ) &
109
 
110
+ MONITOR_PID=$!
111
+ echo "[Monitor] PID: $MONITOR_PID"
112
+
113
+ echo ""
114
+ echo "Starting Node.js server..."
115
+ echo "============================================"
116
+
117
+ # Run server
118
  exec node /app/server.js