Suatu hari, halaman web di server tidak dapat dibuka, dan kesalahan berikut sering dilaporkan.
18-3-2007 1:08:26 org.apache.Tomcat.util.threads.ThreadPool logFull
Parah: Semua thread (150) sedang sibuk, menunggu. Tingkatkan maxThreads (150) atau periksa status servlet.
Saya menemukan beberapa jawaban online.
1. Saya rasa beberapa sumber daya Anda belum dirilis dan terhenti karena simpanan.
2. Masalah kumpulan koneksi
3. Hal ini disebabkan oleh lamanya waktu pemrosesan thread dalam menanggapi permintaan di sisi server
:
Hanya ada 2 orang yang menggunakan situs web pada saat itu, jadi tidak mungkin 150 thread secara bersamaan bisa online. Jadi seharusnya ini bukan masalah database.
Dilihat dari petunjuk kesalahannya, ini seharusnya disebabkan oleh penggunaan kumpulan koneksi yang tidak wajar, atau kumpulan koneksi tidak disetel sama sekali. Bagian yang terhubung ke database dihubungkan menggunakan sumber data Spring JDBC, sebagai berikut:
<kacang>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<!-- driver untuk MySQL-->
<property name="driverClassName"><value>org.gjt.mm.mysql.Driver</value></property>
<property name="url"><value>jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF8</value></property>
<nama properti="nama pengguna"><nilai>pengujian</nilai></properti>
<nama properti="kata sandi"><nilai>pengujian</nilai></properti>
</beans>
Masalahnya seharusnya terjadi pada DriverManagerDataSource Spring, yang bertanggung jawab untuk mengelola koneksi ini.
Berikut penjelasan dari DriverManagerDataSource
DriverManagerDataSource di Spring Framework
javax.sql Antarmuka DataSource
Implementasi SmartDataSource yang mengonfigurasi Driver JDBC lama biasa melalui
properti kacang, dan mengembalikan Koneksi baru setiap saat.
Berguna untuk pengujian atau lingkungan mandiri di luar wadah J2EE
sebagai kacang DataSource di masing-masing ApplicationContext, atau bersamaan dengan
lingkungan JNDI yang sederhana. Panggilan Connection.close() dengan asumsi pool akan sederhana
tutup koneksi, sehingga kode persistensi DataSource apa pun akan berfungsi.
Dalam wadah J2EE, disarankan untuk menggunakan Sumber Data JNDI yang disediakan oleh
wadah DataSource tersebut dapat diekspor sebagai kacang DataSource dalam sebuah
ApplicationContext melalui JndiObjectFactoryBean, untuk peralihan yang lancar ke dan dari
kacang DataSource lokal seperti kelas ini.
Jika Anda memerlukan kumpulan koneksi "nyata" di luar wadah J2EE, pertimbangkan
DBCP Jakarta Commons Apache. BasicDataSource-nya adalah kumpulan koneksi penuh
bean, mendukung properti dasar yang sama dengan kelas ini ditambah pengaturan khusus.
Ini dapat digunakan sebagai pengganti instance kelas ini hanya dengan mengubahnya
nama kelas dari definisi kacang ke
"org.apache.commons.dbcp.BasicDataSource
--------------------------------------
".--------- ----------
Banyak proyek di Jakarta mendukung interaksi dengan database relasional
koneksi baru untuk setiap pengguna dapat memakan waktu (seringkali memerlukan banyak koneksi).
detik waktu jam), untuk melakukan transaksi database yang mungkin
membutuhkan waktu milidetik. Membuka koneksi per pengguna bisa jadi tidak mungkin dilakukan dalam a
aplikasi Internet yang dihosting secara publik di mana jumlah pengguna secara bersamaan dapat melakukannya
Oleh karena itu, pengembang sering kali ingin berbagi "kumpulan" yang terbuka
koneksi antara semua pengguna aplikasi saat ini
sebenarnya melakukan permintaan pada waktu tertentu biasanya sangat kecil
persentase dari jumlah total pengguna aktif, dan selama pemrosesan permintaan adalah
satu-satunya saat koneksi database diperlukan. Aplikasi itu sendiri
masuk ke DBMS, dan menangani masalah akun pengguna apa pun secara internal.
Ada beberapa Kumpulan Koneksi Basis Data yang sudah tersedia, keduanya di dalamnya
Produk-produk di Jakarta dan di tempat lain. Paket Commons ini memberikan peluang untuk melakukan hal tersebut
mengoordinasikan upaya yang diperlukan untuk menciptakan dan memelihara efisiensi,
paket kaya fitur di bawah lisensi ASF.
Paket commons-dbcp bergantung pada kode dalam paket commons-pool untuk disediakan
mekanisme kumpulan objek yang mendasari yang digunakannya.
Aplikasi dapat menggunakan komponen commons-dbcp secara langsung atau melalui yang sudah ada
antarmuka wadah/kerangka pendukungnya
wadah servlet menyajikan Sumber Data DBCP sebagai Sumber Data JNDI (Java
Apache Mail Enterprise Server) telah mengintegrasikan DBCP ke dalam kerangka Avalon A
Sumber data gaya Avalon dibuat dengan menggabungkan implementasi DBCP
menyatukan logika DBCP dan konfigurasi yang ditemukan dalam kode excalibur Avalon
apa yang diperlukan untuk membuat DataSource terintegrasi yang andal
Setelah membaca penjelasannya, faktanya ketika membuat koneksi, DriverManagerDataSource membuat koneksi baru selama ada koneksi, dan tidak ada pool koneksi sama sekali. Akan lebih baik jika beralih ke kumpulan koneksi sumber terbuka berikut.
<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<nama properti="driverClassName">
<nilai>org.hsqldb.jdbcDriver</nilai>
</properti>
<nama properti="url">
<nilai>jdbc:hsqldb:hsql://localhost:9001</nilai>
</properti>
<nama properti="nama pengguna">
<nilai>dan</nilai>
</properti>
<nama properti="kata sandi">
<nilai></nilai>
</properti>
</bean>
Tes telah lulus dan masalah teratasi. Jika tidak ada mesin pencari yang menemukan jawabannya, masalah tidak akan terselesaikan dengan cepat.