我是個網站菜鳥,剛開始搭建LAMP環境的時候,就要了我半條老命。
沒辦法,懂的東西太少,LAMP是什么我都不懂,域名是什么,我也被不懂,為什么想要有個網站就要有服務器我還是不懂。一步步地自己去鑽,去看digitalocean給的說明教程。慢慢就懂了。
我的VPS(Virtual Private Server虛擬專用服務器)的配置很low,CPU只有512M- -
最開始解決這個問題,就是重啟我的服務器
reboot
httpd -k restart
以上兩個代碼用的飛起,實際上如果是database crash了,以下兩個命令應該就ok了
systemctl start mariadb
systemctl status mariadb
好吧,問題來了。剛開始的時候,我發現error establishing這個問題的時候,我根本不知道怎么回事。后來這幾天學了一下mysql的配置才知道。首先,我想要描述一下,解決問題的步驟。
1、發現error establishing a database connection的問題——稍微google一下就知道是數據庫的問題
2、去查數據庫mysql的err log。具體位置應該是在/var/log下面
3、查了以后我就發現是 out of memory,cannot allocate innodb buffer pool=128M(內存只有512M你讓我怎么辦)的問題了
4、google了一下,這種問題有兩種解決方法:
有一種方法就是增加swap文件(下面詳細介紹swap空間及其增加方法):digitalocean的add swapfile教程
還有就是要修改你的innodb_buffer_pool_size(下文詳細介紹)
Swap空間:
Swap分區在系統的物理內存不夠用的時候,把硬盤空間中的一部分空間釋放出來,以供當前運行的程序使用。那些被釋放的空間可能來自一些很長時間沒有什么操作的程序,這些被釋放的空間被臨時保存到Swap分區中,等到那些程序要運行時,再從Swap分區中恢復保存的數據到內存中。
swapon -s
如果你沒有配置swap空間,發現敲完上面的命令,什么也沒有,如果你配置了,就會出現下面的情況,我在我的VPS上配置的是4G:
還有一種方法就是用free,它會顯示出系統整體的內存使用情況:
free -m
2、查看可用的硬盤空間,因為swap空間實際上要用的是硬盤空間,所以,當然你要查看還有多少硬盤可用
df -h
3、創建一個swap文件,並更改其權限
sudo fallocate -l 4G /swapfile
我們查看這個文件的權限
-rw-r--r-- 1 root root 4.0G Oct 30 11:00 /swapfile
會發現這個文件的可讀權限是開發給任何人的,這樣是非常不安全,因此我們要改變一下這個文件的權限
sudo chmod 600 /swapfile
-rw------- 1 root root 4.0G Oct 30 11:00 /swapfile
恩,這樣就安全多了
4、使用這個swap文件
使用下面這個命令,告訴系統我們要把這個文件作為swap文件了
sudo mkswap /swapfile
Setting up swapspace version 1, size = 4194300 KiB
no label, UUID=b99230bb-21af-47bc-8c37-de41129c39bf
然后就是要使用這個swap文件了:
swapon -s
Filename Type Size Used Priority
/swapfile file 4194300 0 -1
然后我們再用free -m命令查看內存的使用情況:
發現這個swap文件已經ok了!
5、使得這個新加入的swap文件永久生效,在系統啟動的時候就生效,因此我們要在/ect/fstab文件里加入下面一行
先用vi打開文件,然后添加下面一行,然后保存。
sudo vi /etc/fstab
/swapfile swap swap sw 0 0
修改innodb_buffer_pool_size:
我的VPS上裝的mariadb(15個mariadb的性能調優方法)。它有四個配置文件- - 分別都在/etc下面:
my.cnf.d是一個文件夾:(這里面有三個文件,忽視掉那個bakup文件,是我修改sever的備份)
然后去/usr/share/mysql里面,會有一些example的配置文件,copy一份過來,我的VPS的配置,我選擇了medium那個文件
然后重啟mariadb
systemctl restart mariadb
我們查看一下innodb_buffer_pool_size有沒有被修改
查看方法:進到mysql里面,然后select下面那個變量。
mysql -uroot -p
mysql> SELECT @@innodb_buffer_pool_size/1024/1024/1024;
恩,發現已經被我們改成50M了!