我有一台 ec2 服务器,有时会出现内存问题 - 由于内存不足,mysql 进程被终止。这会破坏我的网站和游戏,有时我需要几个小时或几天才能注意到 :(。现在我在服务器上运行 lamp、wordpress 和我的 java mmorpg。我知道我的 mmorpg 服务器需要相当多的 RAM 来保存所有实体和数据。
我有1 GB 内存和1 GB 交换空间。这是我目前的最佳输出。
我不明白的是为什么如果我的java 进程为 7.6%和我现在的mysqld 为 1.9%我怎么接近了?它说956MB 内存使用和378MB 交换空间使用 - 这些数字似乎是真实的。这怎么接近 7.6 + 1.9%?
有什么方法可以更好地监控我的内存,或者在 mysql 上配置一些东西,这样它就不会运行 OOM?我很确定我的 java 服务器代码中没有泄漏 - 但不是 100% 确定。
抱歉问了这么多问题 - 我从头开始编写 mmorpg 代码已经 5 年多了,现在我想确保我的服务器已经准备好处理大量的玩家。
评论中请求编辑
自由的输出
total used free shared buffers cached
Mem: 1019336 937316 82020 344 8920 45120
-/+ buffers/cache: 883276 136060
Swap: 1048572 417708 630864
辅助输出
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 19644 0 ? Ss Aug14 0:00 /sbin/init
root 2 0.0 0.0 0 0 ? S Aug14 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S Aug14 0:08 [ksoftirqd/0]
root 4 0.0 0.0 0 0 ? S Aug14 0:00 [kworker/0:0]
root 5 0.0 0.0 0 0 ? S< Aug14 0:00 [kworker/0:0H]
root 7 0.0 0.0 0 0 ? S Aug14 1:51 [rcu_sched]
root 8 0.0 0.0 0 0 ? S Aug14 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? S Aug14 0:00 [migration/0]
root 10 0.0 0.0 0 0 ? S Aug14 0:00 [kdevtmpfs]
root 11 0.0 0.0 0 0 ? S< Aug14 0:00 [netns]
root 12 0.0 0.0 0 0 ? S< Aug14 0:00 [perf]
root 15 0.0 0.0 0 0 ? S Aug14 0:00 [xenwatch]
root 20 0.0 0.0 0 0 ? S Aug14 0:00 [xenbus]
root 21 0.0 0.0 0 0 ? S Aug14 0:19 [kworker/0:1]
root 128 0.0 0.0 0 0 ? S Aug14 0:00 [khungtaskd]
root 129 0.0 0.0 0 0 ? S< Aug14 0:00 [writeback]
root 131 0.0 0.0 0 0 ? SN Aug14 0:00 [ksmd]
root 132 0.0 0.0 0 0 ? SN Aug14 0:00 [khugepaged]
root 133 0.0 0.0 0 0 ? S< Aug14 0:00 [crypto]
root 134 0.0 0.0 0 0 ? S< Aug14 0:00 [kintegrityd]
root 135 0.0 0.0 0 0 ? S< Aug14 0:00 [bioset]
root 137 0.0 0.0 0 0 ? S< Aug14 0:00 [kblockd]
root 488 0.0 0.0 0 0 ? S< Aug14 0:00 [md]
root 616 0.0 0.0 0 0 ? S Aug14 0:46 [kswapd0]
root 617 0.0 0.0 0 0 ? S< Aug14 0:00 [vmstat]
root 689 0.0 0.0 0 0 ? S Aug14 0:00 [fsnotify_mark]
root 708 0.0 0.0 0 0 ? S< Aug14 0:00 [kthrotld]
root 748 0.0 0.0 0 0 ? S< Aug14 0:00 [bioset]
root 752 0.0 0.0 0 0 ? S< Aug14 0:00 [deferwq]
root 1374 0.0 0.0 0 0 ? S< Aug14 0:00 [ata_sff]
root 1387 0.0 0.0 0 0 ? S Aug14 0:00 [scsi_eh_0]
root 1396 0.0 0.0 0 0 ? S< Aug14 0:00 [scsi_tmf_0]
root 1399 0.0 0.0 0 0 ? S Aug14 0:00 [scsi_eh_1]
root 1412 0.0 0.0 0 0 ? S< Aug14 0:00 [scsi_tmf_1]
root 1470 0.0 0.0 0 0 ? S Aug14 0:34 [jbd2/xvda1-8]
root 1471 0.0 0.0 0 0 ? S< Aug14 0:00 [ext4-rsv-conver]
root 1499 0.0 0.0 0 0 ? S< Aug14 0:00 [kworker/0:1H]
root 1517 0.0 0.0 11424 28 ? Ss Aug14 0:00 /sbin/udevd -d
root 1590 0.0 0.0 0 0 ? S< Aug14 0:00 [kpsmoused]
root 1641 0.0 0.0 11312 32 ? S Aug14 0:00 /sbin/udevd -d
root 1827 0.0 0.0 0 0 ? S Aug14 0:00 [kauditd]
root 1882 0.0 0.0 0 0 ? S< Aug14 0:00 [ipv6_addrconf]
root 2035 0.0 0.0 9360 628 ? Ss Aug14 0:00 /sbin/dhclient -q -lf /var/lib/dhclient/dhclient-eth0.leases -pf /var/run/dhclient-eth0.pid eth0
root 2087 0.0 0.0 46536 36 ? S<sl Aug14 0:00 auditd
root 2108 0.0 0.0 247464 0 ? Sl Aug14 0:00 /sbin/rsyslogd -i /var/run/syslogd.pid -c 5
dbus 2137 0.0 0.0 21792 4 ? Ss Aug14 0:00 dbus-daemon --system
root 2266 0.0 0.0 77840 780 ? Ss Aug14 0:00 /usr/sbin/sshd
root 2327 0.0 0.0 115344 28 ? S Aug14 0:00 /bin/sh /usr/libexec/mysql55/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql
mysql 2536 0.6 1.3 886436 13936 ? Sl Aug14 83:28 /usr/libexec/mysql55/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock
root 2585 0.0 0.0 88992 552 ? Ss Aug14 0:18 sendmail: accepting connections
smmsp 2594 0.0 0.0 80440 400 ? Ss Aug14 0:00 sendmail: Queue runner@01:00:00 for /var/spool/clientmqueue
root 2605 0.0 0.1 431276 1284 ? Ss Aug14 0:23 /usr/sbin/httpd
root 2616 0.0 0.0 119516 768 ? Ss Aug14 0:03 crond
root 2630 0.0 0.0 17068 88 ? Ss Aug14 0:00 /usr/sbin/atd
root 2653 0.0 0.0 4312 32 tty1 Ss+ Aug14 0:00 /sbin/mingetty /dev/tty1
root 2655 0.0 0.0 6460 32 ttyS0 Ss+ Aug14 0:00 /sbin/agetty ttyS0 9600 vt100-nav
root 2657 0.0 0.0 4312 32 tty2 Ss+ Aug14 0:00 /sbin/mingetty /dev/tty2
root 2660 0.0 0.0 4312 32 tty3 Ss+ Aug14 0:00 /sbin/mingetty /dev/tty3
root 2664 0.0 0.0 4312 32 tty4 Ss+ Aug14 0:00 /sbin/mingetty /dev/tty4
root 2666 0.0 0.0 4312 32 tty5 Ss+ Aug14 0:00 /sbin/mingetty /dev/tty5
root 2668 0.0 0.0 10876 32 ? S Aug14 0:00 /sbin/udevd -d
root 2669 0.0 0.0 4312 32 tty6 Ss+ Aug14 0:00 /sbin/mingetty /dev/tty6
root 2797 0.0 0.0 0 0 ? S Aug14 0:12 [kworker/u30:2]
ntp 2821 0.0 0.1 29288 1808 ? Ss Aug14 0:01 ntpd -u ntp:ntp -p /var/run/ntpd.pid -g
apache 12405 0.1 4.2 471264 42920 ? S Aug22 1:08 /usr/sbin/httpd
apache 12412 0.1 3.6 466372 37440 ? S Aug22 1:07 /usr/sbin/httpd
apache 12413 0.1 4.1 487140 42788 ? S Aug22 1:09 /usr/sbin/httpd
apache 12416 0.1 3.8 466764 39020 ? S Aug22 1:12 /usr/sbin/httpd
apache 12417 0.1 4.3 474916 44180 ? S Aug22 1:09 /usr/sbin/httpd
apache 12418 0.1 3.9 466596 40108 ? S Aug22 1:07 /usr/sbin/httpd
apache 12419 0.1 4.1 483704 42392 ? S Aug22 1:08 /usr/sbin/httpd
root 12960 0.0 0.0 0 0 ? S Aug22 0:00 [kworker/u30:0]
apache 14977 0.7 4.2 485100 43372 ? S Aug21 24:02 /usr/sbin/httpd
apache 14978 0.7 4.1 489860 42536 ? S Aug21 23:32 /usr/sbin/httpd
apache 14979 0.7 4.3 484092 44816 ? S Aug21 23:51 /usr/sbin/httpd
apache 14980 0.7 4.1 491120 42312 ? S Aug21 24:01 /usr/sbin/httpd
apache 14981 0.7 4.1 491984 42732 ? S Aug21 23:34 /usr/sbin/httpd
apache 14982 0.7 4.2 491680 43680 ? S Aug21 23:43 /usr/sbin/httpd
apache 14983 0.7 4.1 491768 42404 ? S Aug21 23:28 /usr/sbin/httpd
apache 14984 0.7 4.0 490436 41508 ? S Aug21 23:42 /usr/sbin/httpd
apache 15030 0.7 4.3 486920 44224 ? S Aug21 23:39 /usr/sbin/httpd
apache 15040 0.6 4.7 486704 48124 ? S Aug21 23:11 /usr/sbin/httpd
apache 15343 0.6 4.0 484224 41632 ? S Aug21 22:56 /usr/sbin/httpd
apache 16238 0.6 4.1 486556 41812 ? S Aug21 22:34 /usr/sbin/httpd
root 17169 0.0 0.6 115740 6536 ? Ss 10:58 0:00 sshd: ec2-user [priv]
ec2-user 17171 0.0 0.5 115740 5140 ? S 10:58 0:00 sshd: ec2-user@pts/0
ec2-user 17172 0.0 0.3 115476 3320 pts/0 Ss 10:58 0:00 -bash
ec2-user 17227 4.0 0.2 117204 2340 pts/0 R+ 10:58 0:00 ps aux
ec2-user 21561 0.0 0.0 113084 0 ? S Aug21 0:00 /bin/sh /home/ec2-user/bin/startJayServer.sh
ec2-user 21562 49.2 7.2 2283928 73668 ? Sl Aug21 1393:33 java -server com.jayavon.game.server.MyServer -PROD
apache 24084 0.5 4.4 486596 45336 ? S Aug21 14:53 /usr/sbin/httpd
答案1
默认情况下,top
将根据 CPU 使用率对进程进行排序 - 因此看起来,占用所有内存的进程并没有占用太多的 CPU 时间。
排序top
通过 RESident 内存,使用
top -o RES
# or
top -o MEM
# commands may vary slightly depending on distros
在您提供的打印件中ps aux
,我们可以看到大约有 20httpd过程,每个过程消耗接近 40MiB =~ 800MiB 的宝贵 RAM。
您可能需要查看 httpd / apache2 的调整指南。