Categories
Tutorial, Manual, Tips dan Trik

Konfigurasi Tomcat dan MySQL untuk ZK, Sekedar Catatan

Perangkat lunak Apache Tomcat® adalah perangkat lunak open source yang telah banyak digunakan pada skala besar, aplikasi web kritikal pada banyak industri dan organisasi. Data dapat disimpan ke dalam basis data MySQL, MariaDB dan basis data lainnya.

Daftar Isi

Konfigurasi Tomcat dan MySQL

Server Tomcat dapat memberikan performa yang handal untuk aplikasi web apabila pengaturannya tepat.

— Konfigurasi Tomcat dan MySQL untuk ZK, Sekedar Catatan
https://bptsi.unisayogya.ac.id/konfigurasi-tomcat-dan-mysql-untuk-zk-sekedar-catatan/ 2017-01-23 10:26:50

[Update: 8 Januari 2020, 29 Juni 2021]

ZK is the leading enterprise Ajax framework and the easiest way to build great modern Java web applications. ZK is trusted and established with a solid track record as the framework of choice across industries. Tens of thousands of developers use ZK to build their mission critical systems including multi-million dollar systems that serve millions of users and tens of thousands of concurrent sessions on an international scale. With over 1,500,000 downloads, ZK empowers a wide variety of companies and institutions, ranging from small to large in multiple industries. ZK provides an excellent end to end productivity boost over other frameworks by providing a shallow learning curve and solutions for rapid development. ZK offers a fast development environment enabling UI designers and business analysts to come together and make on-the-fly changes to the UI. ZK supports all major patterns of development such as MVC, data-binding, templating, among others. (sumber: https://www.zkoss.org/whyzk/TopReasons, diambil tanggal 23 Januari 2017)

WARNING!!

  1. Berdasarkan pengalaman pribadi, apabila ada setting yang tidak dapat diimplementasikan atau error, maka di luar tanggung jawab kami. Server yang digunakan berbasis UBUNTU (turunan dari Debian)
  2. Nilai yang tercantum sangat tergantung dari resourse yang di miliki, misalnya berapa kapasitas RAM, dan sebagainya

Setting Tomcat

  1. Konfigurasi Server Dengan TMPFS dapat dilihat pada tautan https://pdsi.unisayogya.ac.id/konfigurasi-server-dengan-tmpfs/
  2. Di setiap project ZK, buat file WEB-INF/zk.xml, dengan isi
    <?xml version="1.0" encoding="UTF-8"?>
    <zk>
    <system-config>
    <max-upload-size>-1</max-upload-size>
    </system-config>
    </zk>
  3. Spesifik Tomcat 6
    1. Install Manager, ketik apt-get install tomcat6-admin di terminal
    2. Setting manager, ketik nano /usr/share/tomcat6-admin/manager/WEB-INF/web.xml di terminal, ubah batasan upload dengan menyesuaikan/menambah baris:
      <multipart-config>
      <!-- 70MB max -->
      <max-file-size>73400320</max-file-size>
      <max-request-size>73400320</max-request-size>
      <file-size-threshold>0</file-size-threshold>
      </multipart-config>
    3. Setting admin untuk menggunakan Manager, ketik nano /etc/tomcat6/tomcat-users.xml di terminal, kemudian tambahkan baris berikut di dalam <tomcat-users>:
      <role rolename="manager-gui"/>
      <role rolename="admin"/>
      <user username="admin" password="passwordnya" roles="manager-gui,admin"/>
    4. Setting pengggunaan memori, ketik nano /etc/default/tomcat6 di terminal, ubah
      JAVA_OPTS="-Djava.awt.headless=true -Xmx128m -XX:+UseConcMarkSweepGC"
      menjadi
      JAVA_OPTS="-server -Djava.awt.headless=true -XX:+UseConcMarkSweepGC -Xms5461m -Xmx5461m -XX:NewRatio=3 -XX:SurvivorRatio=6 -XX:PermSize=1365m -XX:MaxPermSize=1820m -Xmn1820m -XX:+CMSIncrementalMode -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=50 -XX:+CMSClassUnloadingEnabled"
      di mana 5461 didapat dari 2/3 RAM, 1365 didapat dari 1/6 RAM dan 1820 didapat dari 4/18 RAM.
    5. Setting direktori temp, ketik nano /etc/default/tomcat6 di terminal, tambahkan di bawah #JVM_TMP=/tmp/tomcat6-temp, teks JVM_TMP=/ram_tmp/tomcat
    6. Setting koneksi tomcat, ketik nano /etc/tomcat6/server.xml di terminal, komentari Connection yang ada di dalam tag <Service name=”Catalina”>, seperti: <!– <Connection … /> –>, kemudian tambahkan baris:
      <Executor name="threadPool-xxx" namePrefix="xxx-pool-" maxThreads="10000" minSpareThreads="20"/>
      <Connector port="7070" executor="threadPool-xxx" protocol="HTTP/1.1" connectionTimeout="20000" compression="on" maxKeepAliveRequests="1" redirectPort="8443" maxPostSize="0" acceptCount="10000" socket.appReadBufSize="1024" socket.appWriteBufSize="1024" bufferSize="1024"/>

      (tambahan, sumber: https://blog.krecan.net/2010/05/02/cool-tomcat-is-able-to-handle-more-than-13000-concurrent-connections/)
    7. Ketik nano /etc/tomcat6/context.xml di terminal, ubah baris <context> seperti berikut
      <Context allowLinking="true">
    8. Restart server sehari sekali, ketik crontab -e di terminal, kemudian tambahkan baris 0 0 * * * /sbin/shutdown -r now
    9. Buat link ke folder upload file, misalnya di /var/foto, ketik ln -s /usr/share/tomcat6/upload /var/foto di terminal
    10. Setting swappiness dan limit, ketik nano /etc/sysctl.conf di terminal, kemudian tambahkan:
      kernel.pid_max = 65536
      fs.file-max = 65536
      vm.swappiness=5

      di mana 65536 dapat disesuaikan dengan kondisi
    11. Setting limit, ketik nano /etc/security/limit.conf di terminal, kemudian tambahkan:
      * hard nofile 65535
      * soft nofile 65535
      root hard nofile 65535
      root soft nofile 65535

      di mana 65536 dapat disesuaikan dengan kondisi
    12. Jangan lupa, semua permisi harus sesuai, ketik chown -R tomcat6:tomcat6 /var/lib/tomcat6/webapps di terminal
  4. Spesifik Tomcat 8
    1. Install Manager, ketik apt-get install tomcat8-admin di terminal
    2. Setting manager, ketik nano /usr/share/tomcat8-admin/manager/WEB-INF/web.xml di terminal, ubah batasan upload dengan menyesuaikan/menambah baris:
      <multipart-config>
      <!-- 70MB max -->
      <max-file-size>73400320</max-file-size>
      <max-request-size>73400320</max-request-size>
      <file-size-threshold>0</file-size-threshold>
      </multipart-config>
    3. Setting admin untuk menggunakan Manager, ketik nano /etc/tomcat8/tomcat-users.xml di terminal, kemudian tambahkan baris berikut di dalam <tomcat-users>:
      <role rolename="manager-gui"/>
      <role rolename="admin"/>
      <role rolename="admin-gui" />
      <role rolename="admin-script" />
      <user username="admin" password="passwordnya" roles="manager-gui,admin,admin-gui,admin-script"/>
    4. Setting pengggunaan memori, ketik nano /etc/default/tomcat8 di terminal, ubah
      JAVA_OPTS="-Djava.awt.headless=true -Xmx128m -XX:+UseConcMarkSweepGC"
      menjadi
      JAVA_OPTS="-server -XX:+UseG1GC -Xms1365m -Xmx5461m -XX:+DisableExplicitGC -XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses -XX:ParallelGCThreads=7 -XX:ConcGCThreads=2"
      di mana 5461 didapat dari 2/3 RAM dan 1365 didapat dari 1/4 dari 5461. 7 adalah jumlah core CPU dikurangi 1 (lihat di top/htop)
    5. Setting direktori temp, ketik nano /etc/default/tomcat8 di terminal, tambahkan di bawah #JVM_TMP=/tmp/tomcat8-temp, teks JVM_TMP=/ram_tmp/tomcat
    6. Setting koneksi tomcat, ketik nano /etc/tomcat8/server.xml di terminal, komentari Connection yang ada di dalam tag <Service name=”Catalina”>, seperti: <!– <Connection … /> –>, kemudian tambahkan baris:
      <Executor name="threadPool-xxx" namePrefix="xxx-pool-" maxThreads="10000" minSpareThreads="20"/>
      <Connector port="7070" executor="threadPool-xxx" protocol="org.apache.coyote.http11.Http11Nio2Protocol" connectionTimeout="20000" compression="on" maxKeepAliveRequests="1" redirectPort="8443" maxPostSize="-1" acceptCount="10000" socket.appReadBufSize="1024" socket.appWriteBufSize="1024" bufferSize="1024"/>

      (tambahan, sumber: https://blog.krecan.net/2010/05/02/cool-tomcat-is-able-to-handle-more-than-13000-concurrent-connections/)
    7. Setting koneksi tomcat, ketik nano /etc/tomcat8/server.xml di terminal, cari dan sesuaikan baris di bawah ini
      <!-- Global JNDI resources Documentation at /docs/jndi-resources-howto.html -->
      <GlobalNamingResources>
      <!-- Editable user database that can also be used by UserDatabaseRealm to authenticate users -->
      <Resource name="UserDatabase" auth="Container"
      type="org.apache.catalina.UserDatabase"
      description="User database that can be updated and saved"
      factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
      pathname="conf/tomcat-users.xml"
      testOnBorrow="true"
      validationQuery="SELECT 1"
      validationInterval="30000"
      />
      </GlobalNamingResources>
    8. Ketik nano /etc/tomcat8/context.xml di terminal, tambahkan di dalam <context> baris berikut
      <Resources allowLinking="true" />
    9. Restart server sehari sekali, ketik crontab -e di terminal, kemudian tambahkan baris 0 0 * * * /sbin/shutdown -r now
    10. Buat link ke folder upload file, misalnya di /var/foto, ketik ln -s /usr/share/tomcat8/upload /var/foto di terminal
    11. Setting swappiness, ketik nano /etc/sysctl.conf di terminal, kemudian tambahkan:
      kernel.pid_max = 65536
      fs.file-max = 65536
      vm.swappiness=5

      di mana 65536 dapat disesuaikan dengan kondisi
    12. Setting limit, ketik nano /etc/security/limit.conf di terminal, kemudian tambahkan:
      * hard nofile 65535
      * soft nofile 65535
      root hard nofile 65535
      root soft nofile 65535

      di mana 65536 dapat disesuaikan dengan kondisi
    13. Jangan lupa, semua permisi harus sesuai, ketik chown -R tomcat8:tomcat8 /var/lib/tomcat8/webapps di terminal

MySQL

  1. Konfigurasi Server Dengan TMPFS dapat dilihat pada tautan https://pdsi.unisayogya.ac.id/konfigurasi-server-dengan-tmpfs/
  2. Restart server sehari sekali, ketik crontab -e di terminal, kemudian tambahkan baris 0 0 * * * /sbin/shutdown -r now
  3. Setting swappiness, ketik nano /etc/sysctl.conf di terminal, kemudian tambahkan:
    kernel.pid_max = 65536
    fs.file-max = 65536
    vm.swappiness=5

    di mana 65536 dapat disesuaikan dengan kondisi
  4. Setting limit, ketik nano /etc/security/limit.conf di terminal, kemudian tambahkan:
    * hard nofile 65535
    * soft nofile 65535
    root hard nofile 65535
    root soft nofile 65535

    di mana 65536 dapat disesuaikan dengan kondisi
  5. Spesifik Ubuntu 12.04
    1. Setting MySQL, ketik nano /etc/mysql/my.cnf di terminal, kemudian setidak-tidaknya terdapat setting
      wait_timeout = 86400
      interactive_timeout = 86400
      open_files_limit = 65535

      di mana 65536 sama dengan nilai yang ada di limit.conf
  6. Spesifik Ubuntu 16.04
    1. Setting MySQL, ketik nano /etc/mysql/mysql.conf.d/mysqld.cnf di terminal, kemudian setidak-tidaknya terdapat setting
      wait_timeout = 86400
      interactive_timeout = 86400
      open_files_limit = 65535

      di mana 65536 sama dengan nilai yang ada di limit.conf
    2. Setting limit MySQL, ketik nano /lib/systemd/system/mysql.service di terminal, kemudian tambahkan baris berikut di areal [Service]
      LimitNOFILE=infinity
      LimitMEMLOCK=infinity
    3. Restart service, ketik systemctl daemon-reload && service mysql restart di terminal
    4. Jalankan nano /etc/mysql/conf.d/disable_strict_mode.cnf di terminal, kemudian tambahkan
      [mysqld]
      sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    5. Terjadi permasalahan setting server MySQL di ubuntu 16.04 MySQL 5.7, yaitu konfigurasi /etc/mysql/my.cnf dan /etc/mysql/mysqld.conf.d/mysqld.conf tidak dieksekusi semua. Pertama, coba cek konfigurasi dengan perintah mysqld --help --verbose. Jika tidak ada yang bermasalah, maka coba hidupkan mysql dengan cara mengetikkan service mysql start, kemudian lihat parameter yang digunakan. Apabila tidak sama dengan file konfigurasi, maka buat cron, dengan mengetikkan crontab -e. Beri penjadwalan, misalnya: */10 * * * * mysql -u root -ppasswordanda -e "SET @@GLOBAL.max_allowed_packet=16*1024*1024;SET @@GLOBAL.max_connections=10000;SET @@GLOBAL.long_query_time=2;SET @@GLOBAL.expire_logs_days=10;SET @@GLOBAL.max_binlog_size=100*1024*1024;SET @@GLOBAL.wait_timeout=1800;SET @@GLOBAL.interactive_timeout=1800;SET @@GLOBAL.event_scheduler=ON;SET @@GLOBAL.read_buffer_size=128*1024;SET @@GLOBAL.key_buffer_size=6349*1024*1024;SET @@GLOBAL.table_open_cache=12288;SET @@GLOBAL.thread_cache_size=8192;SET @@GLOBAL.sort_buffer_size=8192*1024;SET @@GLOBAL.read_buffer_size=8192*1024;SET @@GLOBAL.read_rnd_buffer_size=8192*1024;SET @@GLOBAL.max_user_connections=0;SET @@GLOBAL.sql_mode = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_IN_DATE,NO_ZERO_DATE';"
      sumber: https://www.percona.com/blog/2007/09/17/mysql-what-read_buffer_size-value-is-optimal/
    6. Beri penjadwalan restart mysql jika mysql mati dengan mengetikkan crontab -w. Beri penjadwalan berikut: */10 * * * * if [[ ! "$(/usr/sbin/service mysql status)" =~ "running" ]]; then /usr/bin/service mysql restart fi
    7. Pastikan server bisa ping ke DNS

Demikian, semoga bermanfaat. [bst]

By basit

Biro Pengembangan Teknologi Dan Sistem Informasi

3 replies on “Konfigurasi Tomcat dan MySQL untuk ZK, Sekedar Catatan”

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.