I run several PHP websites in Jooma and WordPress on Ubuntu VPS using Nginx as the web server with PHP-FPM for processing PHP. In most cases all the sites work fast enough, but sometimes (probably once a couple days) I got a message from Yandex (Russian search engine like Google) telling that one of my websites did not respond within 5 seconds. I set up Nginx slowlog and detected that sometimes HTTP requests are processed for more than 5 seconds:
Monitoring CPU Steal Time with command line in Ubuntu
Bash command that writes CPU Steal Time along with other CPU usage statistics from top command header once in a second to MySQL database:
top -b -d 1 | ts ‘%Y-%m-%d %H:%M:%S’ | sed -rn “s/(.{19} )Cpu\(s\):\s+([0-9]+\.[0-9]+)%us,\s+([0-9]+\.[0-9]+)%sy,\s+([0-9]+\.[0-9]+)%ni,\s+([0-9]+\.[0-9]+)%id,\s+([0-9]+\.[0-9]+)%wa,\s+([0-9]+\.[0-9]+)%hi,\s+([0-9]+\.[0-9]+)%si,\s+([0-9]+\.[0-9]+)%st(.*)/INSERT INTO m_perf_stat (CDate, cpu_us, cpu_sy, cpu_ni, cpu_id, cpu_wa, cpu_hi, cpu_si, cpu_st) VALUES (‘\1′, \2, \3, \4, \5, \6, \7, \8, \9);/p” | mysql -u <username> -p<password> <database>
that’s the longest bash command I ever written in my life
Configuring Firewall to enable FTP, SSH and HTTP on Ubuntu
Check your currently implemented firewall rules with the following command:
iptables -L
Examine the output. On a clean Ubuntu installation you will see an empty ruleset:
Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
How to encrypt swap on Ubuntu 12.04
Without going into particulars, it suffices to say that Ubuntu 12.04 has the following script that sets up encrypted swap:
ecryptfs-setup-swap
How to debug a PHP script
It could be useful sometimes to know what variables are defined at particular point of PHP script in order to have a better understanding of the code you are debugging. In contrast with C++, PHP has a magic function get_defined_vars ( void ) that returns an array of all defined variables with their values so we can output all variable names with the following line of code:
print_r(array_keys(get_defined_vars()));
How to start Apache OFBiz demo under Ubuntu Server 12.04
Install JDK 6 with the following command:
apt-get install default-jdk
Download the latest OFBiz version, extract it in your home directory and do the following steps described in the README file.
Having apache-ofbiz-XX.XX.XX as the current directory execute the following command:
./ant load-demo
How to install Apache Tomcat 7 on Ubuntu Server 12.4 LTS
Today I successfully installed Tomcat 7 on Ubuntu Server 12.4 LTS with the following commands (executed as root):
apt-get install default-jdk apt-get install tomcat7 apt-get install tomcat7-admin apt-get install tomcat7-examples
Basic Git commands
Git installs as a normal package on Ubuntu:
sudo apt-get install git |
Configuring Git user is an optional step:
git config --global user.email "you@example.com" git config --global user.name "Your Name" |
Type the following command to create an empty repository wherever your code is:
cd ~ git init |
How to compile BOOST with MS Visual Studio 2010-2017
Fortunately, to compile BOOST with MS VC 2010 we need Visual Studio Command Prompt and five commands:
Navigate to BOOST directory, for example:
F: cd F:\Projects\Lib\boost_1_53_0
How to pass a Dictionary<Key, Value> from C# to PHP
I believe that the simplest way to pass complex data from C# to PHP is through WCF service. See my previous post How to implement WCF service in PHP for more details.
Let assume we have a WCF service contract that has the following method with some nested dictionary as a parameter:
[ServiceContract] public interface IStore { [OperationContract] void UpdateRows(Dictionary<int, Dictionary<string, object>> rows); }
Below I provided the sample implementation of UpdateRows in PHP that iterates through nested dictionaries (first level called ‘rows’ and second level called ‘properties’):